UITableVlew テーブル


UITableViewはテーブルを表示するときに使います。

UITableViewのポイントとしてdelegateメソッドを書くところがポイントです。

TableViewのdelegateメソッド

メソッド名 用例
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section TableViewのセクション表示されるセル数を返します。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 3;
}

表示したい配列のcount数を返すのが定番ですかね。
– (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
セルを取得したいときにindexPathで指定します。このページのサンプルを見てください。書かなくても動きます。
– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath セルを選択したときに呼ばれます。
このページのサンプルを見てください。

TableViewのdelegateプロパティ

delegateメソッド名 用例
– (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath TableViewのセルの高さを設定します。高さ変更はサンプルを見てください。

TableViewの表示

以下サンプルになります。

ヘッダ
//
// ViewController.h
// TableView
//
// Created by kawasaki osamu on 2013/02/16.
// Copyright (c) 2013年 kawasaki osamu. All rights reserved.
//

#import
@interface ViewController : UIViewController
@property (nonatomic, retain) NSArray * tableArray;
@end

UITableViewDelegate, UITableViewDataSourceを書きます。

メタ
//
// ViewController.m
// TableView
//
// Created by kawasaki osamu on 2013/02/16.
// Copyright (c) 2013年 kawasaki osamu. All rights reserved.
//

#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
// viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.tableArray = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", @"ddd", @"eee", nil];
// 画面サイズの取得
CGRect frameSize = [[UIScreen mainScreen] applicationFrame];
// テーブルビューの生成 
UITableView * tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frameSize.size.width, frameSize.size.height) style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
}
// TableのCell数を返す
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}
// TableViewのデータを読み込み
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * identifier = @"basis-cell";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (nil == cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier];
[cell autorelease];
}
cell.textLabel.text = [self.tableArray objectAtIndex:indexPath.row];
return cell;
}
// TableのCellが押されたか
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString * text = [self.tableArray objectAtIndex:indexPath.row];
NSLog(@"%@が押されました", text);
}
// didReceiveMemoryWarning
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

UITableViewを作ってaddSubviewするだけじゃなくて、tableView.delegateとtableView.dataSourceを指定します。
numberOfRowsInSectionとcellForRowAtIndexPathを指定しないと動きません。

書いていないと落ちるはずです。こんな感じで

*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[ViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x8a54770’

とか

*** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:’

UITableViewの表示キャプチャ
UITableView

UITableViewのセル高さを指定

heightForRowAtIndexPathを使います。
// TableViewのセル縦幅を指定する
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
return 80.0;
}

セルの高さが80pxになります。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です