0

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;
}

別のイベントまたはメソッドをインターセプトする必要がありますか?

4

1 に答える 1

0

ユーザーのデフォルトでこれを行うかどうかはわかりません。そうする場合は、選択したセルが対応する配列 (セルのデータを提供する) 内のどのインデックスを追跡する必要があります。

myArray の構造を、データ用とセルの選択状態用の 2 つのキーを持つ辞書の配列に変更します。didSelectRowAtIndexPath と didDeselectRowAtIndexPath のセル状態の値を更新します。次に、cellForRowAtIndexPath で、そのセル状態キーの値を確認します (selectionState と呼びましょう)。

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];
}

もちろん、セルの状態値を永続化するには、配列自体をディスクに保存する必要があります。

于 2013-07-11T16:11:38.453 に答える