App Storeとかであるんだけど、UITableViewの最初の20件とかを
UITableViewで「ほかの??件を読み込む」を実装する方法がわからない - clouderのiPhoneアプリを公開するまでの日記 - iPhoneアプリ開発グループ
読み込んでおいて、もっと見たい場合は一番下のセルの
「ほかの??件を読み込む」
とか
「次の??件…」
ってのを押すとインジケーターがぐるぐる回って
そこにセルがインサートされるみたいなやつを作りたくて
検索してみたけど実装する方法がみつからない。
あれってどうやればいいんだろう…。
もうちょっと探してみる。
「次の??件…」を表示するために最初のデータ件数+1をテーブルビューの行数とします。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger count = [myBookmarks count]; if (count == 0) { return 0; } else if (count == FEED_OFFSET) { return count + 1; } else { return count; } }
一番下のセルが「次の??件…」のセルなので、一番下のセルだけ別処理にして「次の??件…」を表示します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == [myBookmarks count]) { // 「次の??件…」のセルの処理 MyBookmarkNextCell *cell = (MyBookmarkNextCell *)[tableView dequeueReusableCellWithIdentifier:@"MyBookmarkNextCell"]; if (cell == nil) { MyBookmarkNextCellController *controller = [[MyBookmarkNextCellController alloc] initWithNibName:@"MyBookmarkNextCell" bundle:nil]; cell = (MyBookmarkNextCell *)controller.view; [controller release]; } return cell; } else { // 通常のセルの処理 MyBookmarkCell *cell = (MyBookmarkCell *)[tableView dequeueReusableCellWithIdentifier:@"MyBookmarkCell"]; if (cell == nil) { cell = [[[MyBookmarkCell alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 70.0f) reuseIdentifier:@"MyBookmarkCell"] autorelease]; } NSDictionary *entry = [myBookmarks objectAtIndex:indexPath.row]; [cell.titleLabel setText:[entry objectForKey:@"title"]]; [cell.linkLabel setText:[entry objectForKey:@"related"]]; return cell; } }
「次の??件…」のセルが選択されたときは、続きのデータを読み込む処理をします。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == FEED_OFFSET) { // 「次の??件…」が選択されたとき [self loadNext]; [tableView deselectRowAtIndexPath:indexPath animated:YES]; } else { // 通常のセルが選択されたとき selectedRow = indexPath; WebViewController *controller = [[HatenaTouchAppDelegate sharedHatenaTouchApp] sharedWebViewController]; NSDictionary *entry = [myBookmarks objectAtIndex:indexPath.row]; controller.title = [entry objectForKey:@"title"]; controller.pageURL = [entry objectForKey:@"related"]; [[self navigationController] pushViewController:controller animated:YES]; } }
続きのデータを読み込んだ後に、テーブルビューの表示をreloadDataメソッドで更新します。
- (void)loadNext { offset += FEED_OFFSET; [self loadMyBookmarks]; [self.tableView reloadData]; }
関連リンク