1

テーブル ビューの 1 つのセルだけに UISwitch を追加しようとしています。コードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    FormCell *cell = (FormCell *) [tableView dequeueReusableCellWithIdentifier: @"FormCell"];
    if(cell == nil) cell = [[FormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FormCell"];

    if(indexPath.row == 3)
    {
        UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9, 50, 50)];
        [mySwitch addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
        [cell.contentView addSubview:mySwitch];

        [[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:163.0/255.0 green:12.0/255.0 blue:17.0/255.0 alpha:1.0]];
    }

    return cell;
}

問題は、テーブルビューを上下にスクロールするとUISwitchが複製されますが、テーブルビューの最後または最初に...

何か助けはありますか?

4

3 に答える 3

0

細胞は再利用されることを忘れないでください。独自の識別子を持つカスタム UITableViewCell を作成することをお勧めします。そこでカスタマイズを行います。

于 2013-03-11T19:51:09.700 に答える
0

UITableView は高度に最適化されており、主な最適化の 1 つは、可能な限りテーブル セル オブジェクトを再利用することです。これは、テーブルの行と UITableViewCell オブジェクトの間に永続的な 1 対 1 のマッピングがないことを意味します。

したがって、セル オブジェクトの同じインスタンスを複数の行で再利用できます。セルの行が画面外にスクロールすると、その行のセルは「リサ​​イクル」パイルに入り、画面上の別の行に再利用される場合があります。

Switch オブジェクトを作成してセルに追加することで、行 3 が画面に表示されるたびに、テーブルがたまたま行 3 の「デキュー」を行った Cell オブジェクトに再び追加することになります。

再利用可能なセルに何かを追加する場合は、別のテーブル行で再利用されるときにセルをデフォルトにリセットする対応するコードが必要です。

于 2013-03-11T19:51:14.780 に答える