0

私はすべてのセルがaccessoryViewとしてUISwitchを持っているUITableViewを持っています。

また、すべての UISwitch の配列もあります。

viewDidAppear メソッドで、UISwitch の配列を反復処理して無効にします。

それはすべてうまくいっています。

問題は、UITableView を上下に移動すると、非表示になり再び表示される UISwitches が淡色表示されないことです。意図したとおりに無効になっていますが、有効になっているように見えます。

どうすれば解決できますか?

4

1 に答える 1

2

問題は、セルが再利用されているため、セル スイッチが再利用されていることです。1 つの解決策は、セルを強制的に再利用しないようにすることです。

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//if (cell == nil) {

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects){
        if([currentObject isKindOfClass:[UITableViewCell class]]){
            cell = (MyCustomCell *)currentObject;
            break;
        }
    }

//}

if cell==nil がコメント化されているため、セルが再利用されないことに注意してください。明らかに、メモリの節約などには適していませんが、大きなテーブルビューや奇妙なテーブルビューがなければ、おそらく気付かないでしょう。

もう 1 つの方法は、スイッチをチェックするかどうかを決定するブール値の配列を保持し、その配列をcellForRowAtIndexPathメソッドで使用することです。

于 2012-04-19T18:14:30.407 に答える