0

アプリの[設定]ページに問題があります。静的セルを使用することを選択したので、それぞれに3〜4個のセルがあるテーブルセクションがいくつかあります。

viewDidLoadで、NSUserDefaultsをロードし、次のようにアクセサリマークを設定します。

...
}
else if ( ... my Condition3 ... ) {
    indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
}
UITableViewCell* cell = [settingsTable cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;

これは正常に機能し、チェックマークが付いた一致する設定でセルを設定します。ただし、これはデフォルトで画面に表示されているセルに対してのみ機能します。スクロールが必要なセルにはチェックマークが含まれていません。

できれば動的セルを使用せずに、これを修正する方法はありますか?

4

2 に答える 2

4

ああ、私はついにそれを理解しました。cellForRowAtIndexPathはアプリをクラッシュさせるため、次のことを行う必要がありました。

上記のコード(質問内)を使用して、viewDidAppearメソッドでチェックマークが必要なセルを設定しました。また、すべてのチェックマークを削除してから、以前と同じように、didSelectRowAtIndexPathメソッドで選択したセルに1つ追加します。

2つのメソッドのそれぞれで、NSString変数を選択したセルの.textview.textに設定してから、次のメソッドを実装します。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    cell.accessoryType = UITableViewCellAccessoryNone;

    if ([cell.textLabel.text isEqualToString:[NSString stringWithFormat:@"%@", myFirstString]] || [cell.textLabel.text isEqualToString:[NSString stringWithFormat:@"%@", mySecondString]]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}

うまくいけば、これは誰かを助けるかもしれません。

于 2012-08-17T09:01:59.683 に答える
0

これは、スクロールするとセルが再構築され、チェックマークが削除されるためです。

あなたはそれをで設定する必要があります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
于 2012-08-16T09:05:02.273 に答える