在ios開中中,由於螢幕尺寸限制,如果需要顯示的資料很多,需要用到分頁載入。
原理:先資料放到一個table中,先顯示10條,table底部有一察看更多選項,點擊察看更多查看解析的剩餘資料。基本上就是資料來源裡先只放10條, 點擊最後一個cell時, 添加更多的資料到資料來源中. 比如:
資料來源是個array:
NSMutableArray *items;
ViewController的這個方法返回資料條數: +1是為了顯示"載入更多"的那個cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int count = [items count];
return count + 1;
}
這個方法定製cell的顯示, 尤其是"載入更多"的那個cell:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath row] == ([items count])) {
//建立loadMoreCell
return loadMoreCell;
}
//create your data cell
return cell;
}
還要處理"載入更多"的那個cell的選擇事件,觸發一個方法來載入更多資料到列表
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [items count]) {
[loadMoreCell setDisplayText:@"loading more ..."];
[loadMoreCell setAnimating:YES];
[self performSelectorInBackground:@selector(loadMore) withObject:nil];
//[loadMoreCell setHighlighted:NO];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
return;
}
//其他cell的事件
}
載入資料的方法:
-(void)loadMore
{
NSMutableArray *more;
//載入你的資料
[self performSelectorOnMainThread:@selector(appendTableWith:) withObject:more waitUntilDone:NO];
}
添加資料到列表:
-(void) appendTableWith:(NSMutableArray *)data
{
for (int i=0;i<[data count];i++) {
[items addObject:[data objectAtIndex:i]];
}
NSMutableArray *insertIndexPaths = [NSMutableArray arrayWithCapacity:10];
for (int ind = 0; ind < [data count]; ind++) {
NSIndexPath *newPath = [NSIndexPath indexPathForRow:[items indexOfObject:[data objectAtIndex:ind]] inSection:0];
[insertIndexPaths addObject:newPath];
}
[self.tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationFade];
}
我這裡是寫死的資料,作例子,在實現工程項目中,比如:要向伺服器請求資料,一般返回資料會有總共多少頁,一次請求一頁,當使用者需要看更多頁面時,滑動到最下面cell,再請求下一面!
我這裡例子,請求載入更多是寫到didSelectRowAtIndexPath:代理方法中,如果需要自動載入,可以放到- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
代理方法中。