0

チェックボックスとして使用しているリストがあります。選択時に行のチェックマークを有効または無効にしました。しかし、リストをスクロールすると、10行ごとにマーク行が作成されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath];
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark)
    {
        oldCell.accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        oldCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
4

4 に答える 4

0

UItableViewすべてのスクロールでセルを再利用するため、アクセサリの種類ごとに条件を使用することはお勧めできません。NSMutableArray選択したアイテムで作成し、以下の条件で確認できます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    if ([selected containsIndex:indexPath.row]) {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
    // Do the rest of your code
    return cell;
} 

メソッドでdidSelectrowAtindexpathは、選択したアイテムを追加および削除できます。

于 2013-01-29T07:21:48.337 に答える
0

その理由UITableViewは、セルを再利用するためです。したがって、この方法cellForRowAtIndexPathでは、(特定のセクションと行の)特定のセルをチェックする必要があります。チェックする必要がある場合は、アクセサリの種類を指定します。

そのセルに必要ない場合は、アクセサリタイプをnoneとして指定します。

于 2013-01-29T07:19:40.207 に答える
0

でセルのアクセサリ タイプを設定するロジックを配置する必要があります。 cellForRowAtIndexPathチェック マークを付けるセルを識別するには、リスト内のオブジェクトをマークするdidSelectRowAtIndexPath:か、ここでリストの選択/選択されていないオブジェクトの配列を管理します。

于 2013-01-29T07:26:10.717 に答える
0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {

        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];

        [NSMutableArray addObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    } else {

        [selectedCell setAccessoryType:UITableViewCellAccessoryNone];

       [NSMutableArray removeObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    }
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

また、viewDidLoadで、両方の可変配列をインスタンス化します-

yourmutableArray1 = [[NSMutableArray alloc]init];
yourmutableArray2 = [[NSMutableArray alloc]init];
于 2013-01-29T07:33:56.017 に答える