UITableView
行がユーザーの選択を表す設定画面として使用しています。
を使用して選択を維持していNSUserDefaults
ます。私の問題は、セルの特別な外観を作成しようとしていることです。これは、特別な色を作成し、次のコードで使用することによって行います。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.textLabel.text = [myArray objectAtIndex:[indexPath row]];
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor colorWithRed:(200/255.0) green:(200/255.0) blue:(200/255.0) alpha:0.6];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.textColor = [UIColor grayColor];
return cell;
}
これに基づいて、ユーザーのクリックが発生すると、このイベントで構築している灰色がかった色が表示されます。これが私が望むものです。ユーザーが選択を解除すると、灰色がかった背景色がなくなります。
を追加してNSUserDefaults
、そのセルが既に保存されているかどうかを確認する必要があります。イベントは次のようになります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.textLabel.text = [myArray objectAtIndex:[indexPath row]];
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor colorWithRed:(200/255.0) green:(200/255.0) blue:(200/255.0) alpha:0.6];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.textColor = [UIColor grayColor];
if([[NSUserDefaults standardUserDefaults] valueForKey:selectedOption]) {
//Here, how can I make the cell look grayish in the background?
//If I do cell.selected = true// the cell shows a black background color
}
return cell;
}
cell.selected = true
セルの背景が黒く、探しているものとは異なります。このカスタマイズをどこで行うべきか迷っています。
更新: rdelmar の回答に従って、cellForRowAtIndexPath を更新し、カスタマイズ コードを追加しました。
if (myArray[indexPath.Row][selectionState] == YES){
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor colorWithRed:(200/255.0) green:(200/255.0) blue:(200/255.0) alpha:0.6];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.textColor = [UIColor grayColor];
}else{
cell.selectedBackgroundView = nil;
cell.textLabel.textColor = [UIColor blackColor];
}
それでも問題は解決しませんでした。つまり、検証 l(selectionState == yes に合格し、コードをヒットして背景ビューの色を変更しますが、表示するときは変更されません。
このメソッド willDisplayCell を見つけ、そこにカスタマイズに関するコードを移動しましたが、まだ機能しませんでした!!
- (UITableViewCell *)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (myArray[indexPath.Row][selectionState] == YES){
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor colorWithRed:(200/255.0) green:(200/255.0) blue:(200/255.0) alpha:0.6];
cell.selectedBackgroundView = selectionColor;
}
else{
cell.selectedBackgroundView = nil;
cell.textLabel.textColor = [UIColor blackColor];
}
return cell;
}
別のイベントまたはメソッドをインターセプトする必要がありますか?