UITableView
UITableViewクラスは、テーブル形式のコントロールを管理するクラスです。
実際に使用する時は、UITableViewDataSourceプロトコルとUITableViewDelegateプロトコルを実装しなければなりません。
そこで、そうしたお決まりの実装が済んでいるUITableViewControllerというクラスも用意されていますので、場合によって使い分けるとよいです。
UITableViewのクラス階層
UITableViewの生成
// 生成例
UITableView *table = [[UITableView alloc] initWithStyle:<スタイル>];
スタイル名 | 説明 |
---|---|
UITableViewStylePlain | 通常のスタイル ※下図左 |
UITableViewStyleGrouped | グループ化されたスタイル ※下図右 |
UITableViewのプロパティ
プロパティ名/型 | 読専 | 説明 |
---|---|---|
delegate (UITableViewDelegate) |
デリゲートを指定する (例)table.delegate = self; |
|
dataSource (UITableViewDataSource) |
データソースを指定する (例)table.dataSource = self; |
|
title (NSString) |
テーブルのタイトルを設定する (例)table.title = @"ほげ"; |
|
rowHeight (CGFloat) |
セルの高さを設定する (例)table.rowHeight = 80.0; |
|
separatorStyle (UITableViewCell SeparatorStyle) |
区切り線のスタイルを設定する UITableViewCellSeparatorStyleSingleLine:通常 UITableViewCellSeparatorStyleNone:なし (例)table.separatorStyle = UITableViewCellSeparatorStyleNone |
|
separatorColor (UIColor) |
区切り線の色を設定する (例)table.separatorColor = [UIColor blueColor]; |
|
allowsSelection (BOOL) |
セルの選択の可否設定 YES:選択可能 NO:選択不可 (例)table.allowsSelection = NO; |
|
tableHeaderView (UIView) |
テーブルビューのヘッダー部に表示するビューを設定する (例)ヘッダー部に検索バーを表示する table.tableHeaderView = sb ※sbはUISearchBarのインスタンス |
|
tableFooterView (UIView) |
テーブルビューのフッター部に表示するビューを設定する (例)フッター部に検索バーを表示する table.tableFooterView = sb ※sbはUISearchBarのインスタンス |
|
editing (BOOL) |
○ | テーブルが編集モードかどうか取得する (例)BOOL b = table.editing; |
bounces (BOOL) |
一番端までスクロールさせた時にバウンドさせるかどうかの設定 (デフォルトはYES) (例)バウンドさせない table.bounces = NO; |
主要なプロパティのみ掲載しています。
上記「UITableViewのクラス階層」にあるクラスのプロパティも使用できます。
UITableViewのメソッド
メソッド | 説明 |
---|---|
-(void)reloadData | 再読込をする (例)[table reloadData]; ※UITableViewControllerの場合 [self.tableView reloadData]; |
-(void)setEditing:(BOOL)editing animated:(BOOL)animated |
編集モードにする (例)[table setEditing:YES animated:YES]; |
主要なメソッドのみ掲載しています。
上記「UITableViewのクラス階層」にあるクラスのメソッドも使用できます。
UITableViewのデリゲートメソッド
UITableViewを使用する時は、
delegate(UITableViewDelegate)とdataSource(UITableViewDataSource)を実装する必要があり、UITableViewDataSourceのうち2つは実装が必須となっています。(下記表参照)
メソッド | 説明 |
---|---|
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section |
ロード時に呼び出される。 セクションに含まれるセル数を返すように実装する (実装必須) |
-(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
ロード時に呼び出される。 セルの内容を返すように実装する (実装必須) |
-(NSInteger)numberOfSectionsInTableView: (UITableView *)tableView |
ロード時に呼び出される。 セクション数を返すように実装する |
-(NSString *)tableView: (UITableView *)tableView titleForHeaderInSection:(NSInteger)section |
ロード時に呼び出される。 セクションのヘッダータイトルを返すように実装する |
-(NSString *)tableView: (UITableView *)tableView titleForFooterInSection:(NSInteger)section |
ロード時に呼び出される。 セクションのフッタータイトルを返すように実装する |
-(void)tableView: (UITableView*)tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath*)indexPath |
編集モード時で、Delete、Insertされた時に呼び出される。 ※Delete時はcommitEditingStyleにUITableViewCellEditingStyleDeleteが渡ってくる。 ※Insert時はcommitEditingStyleにUITableViewCellEditingStyleInsertが渡ってくる。 (下記例文 dataSource例1 参照) |
-(void)tableView: (UITableView*)tableView moveRowAtIndexPath:(NSIndexPath*) fromIndexPath toIndexPath:(NSIndexPath*)toIndexPath |
編集モード時で、セルが移動された時に呼び出される ※fromIndexPathに移動前のNSIndexPath、toIndexPathに移動後のNSIndexPathが渡ってくる。 |
メソッド | 説明 |
---|---|
-(CGFloat)tableView: (UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath |
セルの高さを返すように実装する (下記 delegate例1 参照) |
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section |
セクションヘッダーの高さを返すように実装する |
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section |
セクションフッターの高さを返すように実装する |
-(void)tableView: (UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath |
セルタップ時に呼び出される。 セルタップ時に行いたい処理を実装する |
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath |
アクセサリボタンタップ時に呼び出される。 |
主要なデリゲートメソッドのみ掲載しています。
【補足】引数のindexPathから、セクション番号とセル番号は以下のように取得できます。
- セクション番号:indexPath.section
- セル番号:indexPath.row
UITableView例文
// テーブルビュー例文
UITableView *table = [[UITableView alloc] initWithStyle:UITableViewStylePlain];
table.frame = CGRectMake(0, 160, 320, 480);
table.delegate = self;
table.dataSource = self;
[self.view addSubview:table];
// dataSource例1
-(void)tableView:(UITableView*)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath*)indexPath{
if(editingStyle == UITableViewCellEditingStyleDelete){
// Delete時の処理をここに書く
}else if(editingStyle == UITableViewCellEditingStyleInsert){
// Insert時の処理をここに書く
}
}
// delegate例1
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.section == 0){
return 30.0; // 1番目のセクションの行の高さを30にする
}else{
return 50.0; // それ以外の行の高さを50にする
}
}