[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でチェックマークの位置を付け直す必要があります。
大変助かりました。
ありがとうございます。