tableViewCell が選択状態に基づいて selectedBackgroundView の表示/非表示を自動的に管理することを認識しているかどうかは、あなたの質問からは明らかではありません。以外にそのメソッドを配置するのにはるかに適した場所がありますviewWillAppear
。1 つは、最初に tableViewCells を作成するときです。つまり、次のようになります。
- (UITableViewCell *)tableView:(UITV*)tv cellForRowAtIP:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
cell = [tv dequeueCellWithIdentifier:@"SomeIdentifier"];
if (cell == nil) {
cell = /* alloc init the cell with the right reuse identifier*/;
[SomeClass customizeBackgroundForSelectedCell:cell];
}
return cell;
}
selectedBackgroundView プロパティを設定する必要があるのは、そのセルの有効期間内に1 回だけです。セルは、必要に応じて表示/非表示を管理します。
別のよりクリーンな手法は、UITableViewCell をサブクラス化し、サブクラスの .m ファイルでオーバーライドすることです。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithBla....];
if (self) {
UIImageView *selectedBGImageView = /* create your selected image view */;
self.selectedBackgroundView = selectedBGImageView;
}
return self;
}
それ以降、セルには、それ以上変更を加えることなく、カスタム選択された背景が表示されるはずです。それだけで機能します。
viewDidLoad:
さらに、このメソッドは、次の UITableView メソッドを使用して、テーブル ビュー セル クラスをテーブル ビューに登録する現在推奨されている方法でうまく機能します。
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier
テーブル ビュー コントローラーのメソッドでこのメソッドを使用するviewDidLoad
と、テーブル ビュー セルのデキューの実装がはるかに短くなり、読みやすくなります。
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerClass:[SomeClass class]
forCellReuseIdentifier:@"Blah"];
}
- (UITableViewCell *)tableView:(UITV*)tv cellForRowAtIP:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"Blah"
forIndexPath:indexPath];
/* set your cell properties */
return cell;
}
このメソッドは、識別子を使用してクラスを登録している限り、セルを返すことが保証されてい@"Blah"
ます。