0

私はを作成しUITableViewCell、そのテーブルに20行あり、画面には一度に5行あります。行が選択されているdidSelectデリゲートメソッドでアクセサリビューのチェックマークを設定しました。私の懸念は、最初の行が選択され、そのアクセサリタイプがチェックされていると仮定します。ここで、テーブルをスクロールすると、6番目の行もチェックされていることがわかります。私は、セルがそれ自体を再利用していて、それ自体を再び作成していないことを知っています。

4

2 に答える 2

1

モデルは、チェックされるセルとチェックされないセルを処理できる必要があります。問題を単純化するために、NSIndexPathチェックする必要のある配列を保持できます。一度に1つしかチェックできない場合は、そのタイプのivarでNSIndexPath十分です。


- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[aTableView cellForRowAtIndexPath:indexPath] accessoryType] == UITableViewCellAccessoryCheckmark)
    {
            // Ok this one is selected, so we will remove it from the Reference Array.

    }
    else
    {
        // Ok this one doesn't has a checkMark
        // First add the checkmark
        [[aTableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark];

        // Add the NSIndexPath to the Array of references
    }
}
于 2012-06-12T06:47:31.053 に答える
-1

デリゲートメソッドで

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *cellId = [NSString stringWithFormat:@"cell%d",indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId ];
    if (cell==nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                       reuseIdentifier:cellId ] autorelease];
    }
}

別のセルIDを別のセル行に設定します。

于 2012-06-12T06:48:23.910 に答える