したがって、cellForRowAtIndexPathの外側のセルを変更することは通常は嫌われていますが、これが私が持っているものです。
質問のインデックスとして使用される静的テーブルがあります(1-33)。各行には、質問と詳細開示インジケーターがあります。これらはすべて、ストイボードに手動で入力されます。
各質問と、質問に回答したかどうかなどのいくつかのプロパティをリストしたファイルがあります。
この画面が読み込まれたら(viewDidAppear)、これらの質問のそれぞれが読み込まれたかどうかを確認し、読み込まれた場合は、詳細インジケーターをチェックマークに切り替えます。
これで、最初の5つのセルで機能します。質問に行って戻ってくると、さらに多くのセルがチェックされます(質問に回答されていない場合でも)。cellForRowAtIndexPathの外部でアクセスしているため、これは未定義の動作ですか?
セルにアクセスして変更するために使用しているコードは次のとおりです。
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (question1Answered)
{
UITableViewCell *cell1 = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]];
[cell1 setAccessoryType:UITableViewCellAccessoryCheckmark];
}
}
繰り返しになりますが、最初の5つの要素に対しては機能し、残りは私が何をしても変更されません。次に、質問に移動して戻ると、選択した状態でさらに表示されます。奇妙な振る舞い...
編集:上記のコードが機能することに気づきましたが、現在画面に表示されているセルのみが更新されます。したがって、下にスクロールして、離れて戻ってくると、表示されているすべてのセルにチェックマークが付きます。表示されていない場合でも、すべてのセルを強制的に更新する方法はありますか?
助けてくれてありがとう...
-デビッド