软件设计中有设计模式,在UI设计方面也有设计模式。由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式。这两种模式已经成为移动平台开发的标准。
分页模式
分页模式规范了移动平台进行大量数据请求的处理方式 。
下拉刷新模式
下拉刷新(Pull-to-Refresh)是重新刷新表视图或列表,重新加载数据,这种模式广泛用于移动平台。下拉刷新与分页相反,当翻动屏幕到 顶部时候,再往下拉屏幕程序就开始重新请求数据,表视图表头部分会出现等待指示器,请求结束表视图表头消失。下拉刷新模式带有箭头动画效果。
在很多开源社区中都有下拉刷新的实现代码,Github上的git://github.com/leah/PullToRefresh.git有一个下拉刷新的例子,可以供大家参考。
iOS6下拉刷新控件
随着下拉刷新模式影响力的越来越大,苹果不得不考虑把它列入自己的规范之中,并在iOS 6 API中推出了下拉刷新控件。iOS 6中的下拉刷新,有点像是在拉一个“胶皮糖”,当这个“胶皮糖”拉断的时候之后会出现等待指示器。
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开发的知识框架。 首先,我们从UIWindow与UIView之间的关系入手。UIView是所有视图的基类,包括窗口本身。UIWindow是UIView的一个特殊子类,...
总的来说,这个"IOS应用源码Demo-时钟视图-毕设学习"项目涵盖了iOS应用开发的多个方面,包括UI设计、动画处理、时间管理、编程模式、测试以及文档编写。通过深入研究这个源码,学生可以全面了解iOS开发流程,并提升...
通过这个压缩包,你可以学习到iOS应用开发的基础知识,包括UI设计、布局管理、数据绑定和屏幕适配等,这些都是iOS开发者必备的技能。同时,它也可以作为一个起点,帮助你深入理解Swift或Objective-C编程,并提高你在...
在iOS开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和应用程序的受欢迎程度。本压缩包文件“ios-iOS ...通过这个项目,开发者可以深入理解移动应用的UI设计和编程实践,提升自己的iOS开发技能。
MVC(模型-视图-控制器)、MVVM(模型-视图-ViewModel)和VIPER(视图-交互- presenter-实体-路由)等设计模式可能会被详细讲解,这些模式有助于构建可扩展、易于测试的应用。此外,了解如何利用Dependency ...
在iOS应用开发中,UI设计模式对于提升用户体验至关重要。下拉刷新(Pull-to-Refresh)是一种常见的用户界面设计,允许用户通过在列表顶部向下拉动来更新内容。这种模式广泛应用于新闻、社交媒体和邮件等应用程序,...
总的来说,通过"超级猜图"这个小程序,你将有机会实践iOS开发中的许多基础技术,包括UI设计、Swift编程、MVC架构、Storyboard布局和Auto Layout。随着对这些知识点的深入理解和熟练运用,你将能够构建出更复杂、更...
5. **MVVM(Model-View-ViewModel)设计模式**: - 这是一种流行的iOS开发架构,它分离了视图、模型和视图模型的职责,提高了代码可读性和可测试性。 6. **Core Data**: - Apple提供的持久化框架,用于本地数据...
在iOS开发中,抽屉式视图(Drawer)是一种常见的设计模式,它允许用户通过从屏幕边缘滑动来展示或隐藏一个侧边栏,通常用于显示导航菜单、设置或者其他辅助内容。这种效果在许多应用程序中都有所应用,比如网易新闻...
在iOS开发中,UI设计和用户体验是至关重要的部分。这个压缩包文件"ios-iOS篇-UI篇-仿今日头条效果父子控制器的应用.zip"显然提供了一个示例,教你如何在iOS应用中实现类似今日头条的滚动标题效果,即文字渐变和字体...
- 单例模式、观察者模式等设计模式的应用场景。 - **单元测试与自动化测试**: - XCTest框架介绍:编写测试用例、断言、Mock对象等。 - UI测试:XCUITest框架使用技巧。 - 测试驱动开发(TDD)流程:先写测试后...
在iOS开发中,设计模式是一种解决常见编程问题的模板或最佳实践,可以帮助开发者编写可维护、可扩展的代码。在这个“ios-超简单的设计模式MVP例子”中,我们将探讨Model-View-Presenter(MVP)模式,这是一种常用于...
在iOS开发中,UI设计是至关重要的一环,它直接影响到用户对应用的体验。本教程主要探讨了如何在iOS应用中实现一个自定义的CheckBox,即`BECheckBox`,这通常是一个开发者在构建用户界面时会遇到的需求。下面将详细...
总的来说,这个项目涵盖了iOS UI设计、自定义视图、网络请求、数据驱动界面、布局计算等多个知识点,对于提升iOS开发者的综合能力有很大帮助。通过研究和优化这个项目,开发者可以更好地理解和掌握iOS开发中的关键...
在iOS开发领域,UI设计和实现是至关重要的部分,它直接影响到用户对应用程序的第一印象和使用体验。本篇我们聚焦于“iOS开发 - 第02篇 - UI进阶 - 05 - QQ好友列表”,这是一个关于如何在iOS应用中创建类似QQ的好友...
在iOS开发中,表视图(UITableView)是用于展示数据列表的一种常见且强大的控件。它允许用户滚动浏览数据,并可以实现多种交互功能,如点击选中、滑动操作等。"ios 表视图一"这个主题主要是针对初学者,提供了一个...
在iOS开发领域,斯坦福大学的课程以其权威性和深度闻名,尤其对于初学者而言,它提供了深入了解Apple平台开发的宝贵资源。"白胡子老爷爷"是学生们对教授的亲切称呼,他的课程通常深入浅出,易于理解。在这个“IOS...
在iOS开发中,创建自定义的表盘视图可以为应用程序提供独特的用户界面,增加用户的交互...开发者可以通过深入理解这个项目,学习到如何在iOS应用中构建复杂的UI组件并实现动画效果,提升自己的Swift编程和UI设计技能。
在iOS开发中,创建用户界面时,我们常常会遇到UITableView这样的滚动视图,它用于展示大量的数据。在UITableView中,头部视图(HeaderInSection)通常用来显示一些特殊的UI元素或者提供额外的信息。标题“ios-头部...
通过研究这个源码,开发者可以深入理解iOS开发中的关键技术和设计模式。 在iOS开发中,使用的主要编程语言是Swift或Objective-C。Swift是苹果推出的一种现代化、安全的编程语言,而Objective-C则是一种更为传统的、...