HOME > UITableView

UITableView

UITableViewクラスは、テーブル形式のコントロールを管理するクラスです。

実際に使用する時は、UITableViewDataSourceプロトコルとUITableViewDelegateプロトコルを実装しなければなりません。
そこで、そうしたお決まりの実装が済んでいるUITableViewControllerというクラスも用意されていますので、場合によって使い分けるとよいです。

UITableViewのクラス階層

NSObject

UIResponder

UIView

UIScrollView

UITableView

UITableViewの生成


// 生成例
UITableView *table = [[UITableView alloc] initWithStyle:<スタイル>];

【UITableViewのスタイル】
スタイル名 説明
UITableViewStylePlain 通常のスタイル ※下図左
UITableViewStyleGrouped グループ化されたスタイル ※下図右

UITableViewStylePlain UITableViewStyleGrouped

UITableViewのプロパティ

【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のメソッド

【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つは実装が必須となっています。(下記表参照)

【UITableViewDataSourceプロパティ】
メソッド 説明
-(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が渡ってくる。
【UITableViewDelegateプロパティ】
メソッド 説明
-(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にする
      }
}