[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回起動時の選択項目にチェックマークを付ける
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
for (int i = 0;i<3;i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [myTableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryNone;
}
NSInteger selectedRow = [[myDictionary objectForKey:@"level"]intValue];
NSIndexPath *oldIndexPath = [NSIndexPath indexPathForRow:selectedRow inSection:0];
UITableViewCell *oldCell = [myTableView cellForRowAtIndexPath:oldIndexPath];
oldCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
注目ポイントは4行目の[NSIndexPath indexPathForRow:inSection:]です。これでセクション番号0(つまり一番上のセクション)の行番号i(ここでは一番上の0から三番目の2までが入ります)を示すindexPathが作れます。次の行ではこれを使ってセクション番号0、行番号iのセルへのポインタを獲得しています。そして、そのセルのアクセサリーを「なし(UITableViewCellAccessoryNone)」にしています。この一連の処理で全部のセルからチェックマークを外します(何かの間違いでチェックマークが残らないように、念のために一回全部消してしまっています)。そして今回は詳しく触れませんが、終了時に保存しておいたディクショナリーからどのセルを選択したかの記録を呼び出します。そこから前回選択したセルのポインタを取得、そのアクセサリーを「チェックマークあり(UITableViewCellAccessoryCheckmark)」にしたというわけです。
ちなみに、myTableViewはヘッダーファイル側で
IBOutlet UITableView *myTableView;
@property (nonatomic,retain) UITableView *myTableView;
というプロパティにしてあり、さらにメソッドファイルで
@synthesize myTableView;
と@implementation直後に宣言してあり、deallocで
[myTableView release];
2009.03.04追記
このビューが扱うデータが1つに限定される場合には、ViewWillAppearではなくViewDidLoadに記述しておけば問題ありません。選択させるデータは全く同一でも、複数のビューから呼び出して使い回しをする場合にはViewWillAppearでチェックマークの位置を付け直す必要があります。
セルの高さ
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 45; // 上で指定しなかった全てのセクション・行の高さは全て45ピクセルにします。
セルの各行に表示するテキスト
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
break;
break;
セクションごとの行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
ただ、実際にそんなことは滅多にないでしょう。その場合はsectionの値で分岐させて値を返します。この場合も前回と同様セクションが4つある場合です。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
セクションに表示する文字列
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
switch (section) {
break;
break;
break;
return str;
テーブルのセクション数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
プログラマ側でいじるのは返す値だけです。上の例では、このテーブルには4つのセクションがありますよと知らせているわけです。
テーブルに文字列を表示する
- 新規プロジェクトでNavigation-Based Applicationを選び、適当な名前を付けてプロジェクトを作成する。
- RootViewController.mからnumberOfRowsInSectionという命令を探し、return 0;をreturn 1;と書き換える。
- 同じくRootViewController.mからcellForRowAtIndexPathという命令を探し、最後のreturn cell;の前に cell.text = @"あいうえお"; と書いた行を挿入する。
- これをそのままビルドし実行すると、テーブルの一番上の行に「あいうえお」と表示される。