俩个UI设计模式:分页模式和下拉刷新模式
1.分页模式
当数据量很大时,一次返回所有的信息这种方式严重影响应用的性能,造成网络堵塞。通常我们利用分页模式来解决请求大量数据的问题。分页模式是先请求少量数据,例如一次50条,当翻动屏幕已显示50条数据后,应用会再次请求50条。根据触发方式的不同,请求分为主动请求和被动请求。主动请求模式,即当条件满足时,再次请求下50条数据是自动发出的,并且一般在表视图的表脚会出现活动指示器,请求结束后活动指示器会隐藏起来。被动请求模式,当条件满足是,表视图的表脚中会出现一个响应点击事件的控件,这个控件一般是一个按钮,按钮标签一般会设为“更多”,当点击“更多”按钮时,应用会向服务器请求,请求结束后“更多”按钮会隐藏起来。
2.下拉刷新模式
下拉刷新是重新刷新表视图或列表,以便重新加载数据。下拉刷新与分页相反,当翻动屏幕到顶部时,在往下拉屏幕,程序就开始重新请求数据,此时表视图的表头部分会出现活动指示器,请求结束后表头消失。
@interface ViewController : UITableViewController<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic,strong)NSMutableArray *logs;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.logs = [[NSMutableArray alloc]init];
NSDate *date = [[NSDate alloc]init];
[self.logs addObject:date];
UIRefreshControl *rc = [[UIRefreshControl alloc]init];
rc.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
[rc addTarget:self action:@selector(refreshTableView) forControlEvents:UIControlEventValueChanged];
self.refreshControl = rc;
}
-(void)refreshTableView
{
if(self.refreshControl.refreshing){
self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"加载中..."];
NSDate *date = [[NSDate alloc]init];
[self performSelector:@selector(callBackMethod:) withObject:date afterDelay:3];
}
}
-(void)callBackMethod:(id)obj
{
[self.refreshControl endRefreshing];
self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
[self.logs addObject:(NSDate*)obj];
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - 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 *cellIndentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifier];
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
cell.textLabel.text = [dateFormatter stringFromDate:[self.logs objectAtIndex:indexPath.row ]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
@end