`

iOS开发那些事-表视图UI设计模式

阅读更多

软件设计中有设计模式,在UI设计方面也有设计模式。由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式。这两种模式已经成为移动平台开发的标准。

 

 

 

分页模式

 

1

 

        分页模式规范了移动平台进行大量数据请求的处理方式 。

 

下拉刷新模式

 

下拉刷新(Pull-to-Refresh)是重新刷新表视图或列表,重新加载数据,这种模式广泛用于移动平台。下拉刷新与分页相反,当翻动屏幕到 顶部时候,再往下拉屏幕程序就开始重新请求数据,表视图表头部分会出现等待指示器,请求结束表视图表头消失。下拉刷新模式带有箭头动画效果。

 

 2

 

       在很多开源社区中都有下拉刷新的实现代码,Github上的git://github.com/leah/PullToRefresh.git有一个下拉刷新的例子,可以供大家参考。

 

iOS6下拉刷新控件

 

随着下拉刷新模式影响力的越来越大,苹果不得不考虑把它列入自己的规范之中,并在iOS 6 API中推出了下拉刷新控件。iOS 6中的下拉刷新,有点像是在拉一个“胶皮糖”,当这个“胶皮糖”拉断的时候之后会出现等待指示器。

 

 3

 

       iOS 6 之后UITableViewController添加了一个refreshControl属性,这个属性保持了一个UIRefreshControl的对 象指针。UIRefreshControl就是iOS 6为表视图实现下拉刷新而提供的。UIRefreshControl类目前只能应用于表视图画面,其它视图不能使用。该属性与 UITableViewController配合使用,关于下拉刷新布局等问题可以不必考虑,UITableViewController会将其自动放置 于表视图中。

 

我们通过一个例子来了解一下UIRefreshControl控件的使用。参考创建简单表视图的案例,创建工程“RefreshControlSample”,然后修改代码ViewController.h。

 

#import <UIKit/UIKit.h>

@interface ViewController : UITableViewController

@property (nonatomic,strong) NSMutableArray* Logs;

@end

 

 

Logs属性存放了NDate日期列表,用于在表视图中显示需要的数据,ViewController.m中的初始化代码如下:

 

- (void)viewDidLoad

{

[super viewDidLoad];

//初始化变量和时间

self.Logs = [[NSMutableArray alloc] init];

NSDate *date = [[NSDate alloc] init];

[self.Logs addObject:date];

//初始化UIRefreshControl

UIRefreshControl *rc = [[UIRefreshControl alloc] init];

rc.attributedTitle = [[NSAttributedString alloc]initWithString:@”下拉刷新”];

[rc addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];

self.refreshControl = rc;

}

 

 

viewDidLoad方法中初始化了一条当前时间的模拟数据。UIRefreshControl的构造方式是init。 attributedTitle属性用于下拉控件显示标题文本。UIRefreshControl的addTarget: forControlEvents:方法能够通过编程方式为UIControlEventValueChanged事件添加处理方法。 refreshTableView是UIControlEventValueChanged事件的处理方法,refreshTableView方法的代码 如下:

 

-(void) refreshTableView

{

if (self.refreshControl.refreshing) {

self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@”加载中…”];

//添加新的模拟数据

NSDate *date = [[NSDate alloc] init];

//模拟请求完成之后,回调方法callBackMethod

[self performSelector:@selector(callBackMethod:) withObject:date afterDelay:3];

}

}

 

 

 

UIRefreshControl的refreshing属性可以判断控件是否还处于刷新中的状态,刷新中状态的图标是我们常见的等待指示器,在这 个阶段要将显示标题文本设置为“加载中…”。接下来应该是进行网络请求或者数据库查询的操作。这些操作完成后应用会回调callBackMethod方 法,本案例涉及云端的技术,我们使用[self performSelector:@selector(callBackMethod:) withObject:date afterDelay:3]语句延时调用callBackMethod方法来模拟实现。

 

回调方法callBackMethod:的代码如下。

 

-(void)callBackMethod:(id) obj

{

[self.refreshControl endRefreshing];

self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@”下拉刷新”];

[self.Logs addObject:(NSDate*)obj];

[self.tableView reloadData];

}

 

 

 

在请求完成的时候endRefreshing方法可以停止下拉刷新控件,回到初始状态,显示的标题文本为“下拉刷新”。[self.tableView reloadData]语句是重新加载表视图。

 

实现UITableViewDataSource的两个方法代码如下:

 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [self.Logs count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @”Cell”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];

}

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];

cell.textLabel.text = [dateFormat stringFromDate: [self.Logs objectAtIndex:[indexPath row]]];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;

}

 

分享到:
评论

相关推荐

    UI第二章:iOS开发教程课件-- 视图与窗口的基础

    本篇教程将详细介绍UI开发中的视图与窗口基础知识,为初学者搭建起iOS开发的知识框架。 首先,我们从UIWindow与UIView之间的关系入手。UIView是所有视图的基类,包括窗口本身。UIWindow是UIView的一个特殊子类,...

    IOS应用源码Demo-时钟视图-毕设学习.zip

    总的来说,这个"IOS应用源码Demo-时钟视图-毕设学习"项目涵盖了iOS应用开发的多个方面,包括UI设计、动画处理、时间管理、编程模式、测试以及文档编写。通过深入研究这个源码,学生可以全面了解iOS开发流程,并提升...

    IOS应用源码Demo-宫格视图(支持横屏)LOGO-毕设学习.zip

    通过这个压缩包,你可以学习到iOS应用开发的基础知识,包括UI设计、布局管理、数据绑定和屏幕适配等,这些都是iOS开发者必备的技能。同时,它也可以作为一个起点,帮助你深入理解Swift或Objective-C编程,并提高你在...

    ios-iOS - UI - 01 - 计算器.zip

    在iOS开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和应用程序的受欢迎程度。本压缩包文件“ios-iOS ...通过这个项目,开发者可以深入理解移动应用的UI设计和编程实践,提升自己的iOS开发技能。

    iOS开发进阶篇-成为一个iOS开发高手

    MVC(模型-视图-控制器)、MVVM(模型-视图-ViewModel)和VIPER(视图-交互- presenter-实体-路由)等设计模式可能会被详细讲解,这些模式有助于构建可扩展、易于测试的应用。此外,了解如何利用Dependency ...

    IOS UI设计模式 - 下拉刷新

    在iOS应用开发中,UI设计模式对于提升用户体验至关重要。下拉刷新(Pull-to-Refresh)是一种常见的用户界面设计,允许用户通过在列表顶部向下拉动来更新内容。这种模式广泛应用于新闻、社交媒体和邮件等应用程序,...

    iOS开发 - 第01篇 - UI基础 - 04 - 超级猜图

    总的来说,通过"超级猜图"这个小程序,你将有机会实践iOS开发中的许多基础技术,包括UI设计、Swift编程、MVC架构、Storyboard布局和Auto Layout。随着对这些知识点的深入理解和熟练运用,你将能够构建出更复杂、更...

    iOS开发进阶篇-成为iOS开发高手-源码

    5. **MVVM(Model-View-ViewModel)设计模式**: - 这是一种流行的iOS开发架构,它分离了视图、模型和视图模型的职责,提高了代码可读性和可测试性。 6. **Core Data**: - Apple提供的持久化框架,用于本地数据...

    iOS开发-抽屉式视图

    在iOS开发中,抽屉式视图(Drawer)是一种常见的设计模式,它允许用户通过从屏幕边缘滑动来展示或隐藏一个侧边栏,通常用于显示导航菜单、设置或者其他辅助内容。这种效果在许多应用程序中都有所应用,比如网易新闻...

    ios-iOS篇-UI篇-仿今日头条效果父子控制器的应用.zip

    在iOS开发中,UI设计和用户体验是至关重要的部分。这个压缩包文件"ios-iOS篇-UI篇-仿今日头条效果父子控制器的应用.zip"显然提供了一个示例,教你如何在iOS应用中实现类似今日头条的滚动标题效果,即文字渐变和字体...

    iOS开发进阶-完整版

    - 单例模式、观察者模式等设计模式的应用场景。 - **单元测试与自动化测试**: - XCTest框架介绍:编写测试用例、断言、Mock对象等。 - UI测试:XCUITest框架使用技巧。 - 测试驱动开发(TDD)流程:先写测试后...

    ios-超简单的设计模式MVP例子.zip

    在iOS开发中,设计模式是一种解决常见编程问题的模板或最佳实践,可以帮助开发者编写可维护、可扩展的代码。在这个“ios-超简单的设计模式MVP例子”中,我们将探讨Model-View-Presenter(MVP)模式,这是一种常用于...

    IOS源码应用Demo-iphone开发技巧UI篇之实现CheckBox BECheckBox.zip

    在iOS开发中,UI设计是至关重要的一环,它直接影响到用户对应用的体验。本教程主要探讨了如何在iOS应用中实现一个自定义的CheckBox,即`BECheckBox`,这通常是一个开发者在构建用户界面时会遇到的需求。下面将详细...

    ios-Banner视图.zip

    总的来说,这个项目涵盖了iOS UI设计、自定义视图、网络请求、数据驱动界面、布局计算等多个知识点,对于提升iOS开发者的综合能力有很大帮助。通过研究和优化这个项目,开发者可以更好地理解和掌握iOS开发中的关键...

    iOS开发 - 第02篇 - UI进阶 - 05 - QQ好友列表

    在iOS开发领域,UI设计和实现是至关重要的部分,它直接影响到用户对应用程序的第一印象和使用体验。本篇我们聚焦于“iOS开发 - 第02篇 - UI进阶 - 05 - QQ好友列表”,这是一个关于如何在iOS应用中创建类似QQ的好友...

    ios 表视图一

    在iOS开发中,表视图(UITableView)是用于展示数据列表的一种常见且强大的控件。它允许用户滚动浏览数据,并可以实现多种交互功能,如点击选中、滑动操作等。"ios 表视图一"这个主题主要是针对初学者,提供了一个...

    IOS开发斯坦福--卡牌游戏源码

    在iOS开发领域,斯坦福大学的课程以其权威性和深度闻名,尤其对于初学者而言,它提供了深入了解Apple平台开发的宝贵资源。"白胡子老爷爷"是学生们对教授的亲切称呼,他的课程通常深入浅出,易于理解。在这个“IOS...

    ios-表盘绘制-swift.zip

    在iOS开发中,创建自定义的表盘视图可以为应用程序提供独特的用户界面,增加用户的交互...开发者可以通过深入理解这个项目,学习到如何在iOS应用中构建复杂的UI组件并实现动画效果,提升自己的Swift编程和UI设计技能。

    ios-头部视图拉伸不变形.zip

    在iOS开发中,创建用户界面时,我们常常会遇到UITableView这样的滚动视图,它用于展示大量的数据。在UITableView中,头部视图(HeaderInSection)通常用来显示一些特殊的UI元素或者提供额外的信息。标题“ios-头部...

    IOS应用源码Demo-一款双人对战的ios球类游戏源码-毕设学习.zip

    通过研究这个源码,开发者可以深入理解iOS开发中的关键技术和设计模式。 在iOS开发中,使用的主要编程语言是Swift或Objective-C。Swift是苹果推出的一种现代化、安全的编程语言,而Objective-C则是一种更为传统的、...

Global site tag (gtag.js) - Google Analytics