たとえば、プラスボタン付きのセルを持つtableViewを見ているとき、そのボタンを押すと現在のボタンが非表示になりますが、テーブルビューをスクロールすると他のcustomCellsの他のボタンも非表示になりますが非表示にしませんでした。私を助けてください。この問題をどのように適合させるか。
3 に答える
UITableViewはセルをキャッシュします。つまり、すべてのセルを常に保存するわけではなく、メモリの点で優れています。それに関する問題は、セルが再利用されるときにそのセルに格納されている値への参照がないことです。よく行われるのは、動的セルに格納されているすべての値が個別のNSMutableArrayに格納されていることです。
あなたの問題のために、あなたはそれらが隠されているかどうかを示すブール値を持つ配列を追加し、そしてtableView:cellForRowAtIndexPath:
デリゲートメソッドでそれから読み取ることができます
cell.hidden = [[self.yourArray objectAtIndex:indexPath.row] boolValue];
また、ボタンのコールバックメソッドでは、配列の値を更新するだけでなく、hiddenpropertyを変更する必要があります。
私は次のようにそれを行います:
まず、ボタンの状態を追跡する必要があります: 表示 または 非表示
これは、状態をNSMutableArrayに保持することによって行われます。
メソッドにviewDidLoad
以下を追加します
NSMutableArray *shownButtons = [[NSMutableArray alloc] init];
その後、あなたtableView:cellForRowAtIndexPath
の中で次のことを行います
NSString *tmpIndexPathString = [NSString stringWithFormat:@"%d",indexPath.row];
if ([shownButtons containsObject:tmpIndexPathString])
{
[cell.myButton setHidden:YES];
}
else
{
[cell.myButton setHidden:NO];
}
デリゲートメソッドではtableView:cellForRowAtIndexPath:
、表示されているすべてのセルをループする必要があります。
for (UITableViewCell *cell in [self.tableView visibleCells]) {
// now you have a cell that you can update
}
また、データソースを更新することを忘れないでください。テーブルをスクロールすると、それに応じてセルが更新され、プラスボタンは表示されません。データソースを更新する場合、たとえば、上記のforループでセルをリロードすることができます。