2011-12-14 7 views
1

現在画面に表示されていないUITableViewCellにアクセスする方法はありますか?現在表示されていない行を更新しようとしています。私はこの折りたたみ可能な/展開可能な行をアップルのサンプルコードのUITableViewに使用しています。私はこれを使用します:現在表示されていないUITableViewCell行へのアクセス

for (NSInteger row = 0; row < totalRows; row++) { 
    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:section]; 
    OrderTableViewCell *cell = (OrderTableViewCell *)[_tableView cellForRowAtIndexPath:path]; 
    cell.CheckmarkButton.selected = YES; 
    cell.Symbol.isSelected = YES; 
} 

私のtotalRowsは、私がTableViewから行の数を取得するのは正しいです。だから、私はそれを使用して、すべての行をループし、いくつかの値を設定できると思った。しかし、行の状態を調べると、現在画面に表示されているものは値を持ち、変更可能ですが、画面外のものはnullで設定できません。私はこれを回避する方法はありますか?ありがとう。

答えて

0

あなたがしたいものによって更新するだけで、バッキングコレクションのi番目のエントリを更新することができます。

たとえば、CheckmarkButtonに対応するboolを保存したコレクションを持つことができます。あなたのループではmyArray[row] = YESを設定することができます。 cellForRowAtIndexPathにはcell.CheckmarkButton.selected = myArray[indexPath.row]があります。

各セルに複数の項目を保持する場合は、上記の例のmyArrayに、i番目のセルに関連する値を保持するオブジェクトのインスタンスを含めることができます。

+0

ありがとう!よく働く! – Crystal

0

なぜ、セルを更新する必要がありますか?セルが表示されていない場合は、メモリを保存するためにシステムがアンロードします。ビュー内にないので、ビューを更新する必要はありません。セルを直接ロードするのではなく、セルをロードするためにcellForRowIndexPathがテーブルビューによって呼び出されるときに状態が反映されるようにする必要があります。希望するルックが表示されます...あなたがやっていることをやりたい唯一の理由は、あなたがセルを更新する必要があります...あなたがまだ状態を設定し、セルを直接操作するのではなく、reloadRowsAtIndexPathsを呼び出すことができます...

+0

私はすべての選択された行をチェックするためにすべてのメカニズムをチェックしようとしています。それは私の思考プロセスは行にプロパティを設定する行を取得することだったので、表示されたらチェックマークが反映されます。 MrMusicが推薦しているものを使用しますか? – Crystal

+0

はい、mrmusicが勧告したのは、私がここで説明したものですが、もっと具体的な例があります。 – Daniel

+0

あなたの助けに感謝します! – Crystal

関連する問題