UITableView - shirai/SwiftLearning GitHub Wiki
UITableView
概論
目標
- UITableViewの概論が説明できる。特にセルの生成の仕組みを説明できる。
わかったこと
-
UITableViewとは
- 複数の値をリスト表示させたい場面で使用する
- テーブルビューの中身はセクション(Section)と、行(Row)で分かれており、各行に表示する内容はセル(Cell)と呼ばれている
- DataSourceはデータに対する要求を処理してくれるクラスであり、DelegateはTableViewに対してのイベントを処理してくれるクラスを指定するものである
- 上記二つのデリゲートメソッドと、UITableViewのプロパティやメソッドを使い実装を行う
- セルについての詳細は別途UITableViewCellに記載する。
-
セル生成の仕組み
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
→このメソッドはセルがロードするたびに呼び出され、セルの値を返す
//"cell"というidentifierでcellデータを取得
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
→この時点では@"cell"と言うidentifierで指定されたセルがない
→その場合nilが代入される
→①現在cellにはnilが代入されている
// cellデータが無い場合、UITableViewCellを生成して、"cell"というidentifierでキャッシュする
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
→上記①の通り、cellにはnilが入っているため、if文の条件を満たす
→=以降でセルを生成(今回はデフォルトの設定で生成)し、元々nilであったcellに代入
→cellの生成が完了!
わからなかったこと
- セルの再利用についての理解が曖昧
つぎにやること
- セルの再利用について完全に理解し、口頭で説明できるようになる
UITableViewDelegate
目標
- UITableViewDataSourceの概念、各メソッドの説明ができ、使用できる
わかったこと
-
UITableViewDelegateはTableViewに対してのイベントを処理してくれるクラス
-
セルがタップされた時に実行したい処理の実装 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //実行したい処理 }
- これを使って画面遷移ができる(以下例) -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [self performSegueWithIdentifier:@"toViewController" sender:self]; }
わからなかったこと
- 上記以外のメソッドは利用していないため、理解していない
つぎにやること
- 概論を理解し、口頭で説明できるようになる
- 上記以外のメソッドも実際に使い理解する
UITableViewDataSource
目標
- UITableViewDataSourceの概念、各メソッドの説明ができ、使用できる
わかったこと
- セクション数の設定 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return セクション数; }
- 列数の設定 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 列数; }
- セル名の設定
@interface MasterTableViewController ()<UITableViewDelegate, UITableViewDataSource>{
NSArray *nameList;
}
@end
@implementation MasterTableViewController - (void)viewDidLoad { [super viewDidLoad]; nameList = @[@"田中",@"木本",@"福岡",@"白井",@"久岡",@"結城",@"岡田"]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // "cell"というkeyでcellデータを取得 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; // cellデータが無い場合、UITableViewCellを生成して、"cell"というkeyでキャッシュする if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; } //cellにリストから取得した値を設定する cell.textLabel.text = [nameList objectAtIndex:indexPath.row]; return cell; } @end
がそれぞれ上記でできるということ
わからなかったこと
- コードは書けるが、概論は理解していない
- 上記以外のメソッドは利用していないため、理解していない
つぎにやること
- 概論を理解し、口頭で説明できるようになる
- 上記以外のメソッドも理解し、使えるようになる