2012-04-19 8 views
0

すべてのセルにaccessoryViewとしてUISwitchがあるUITableViewがあります。UITableViewCell IDのUISwitchが視覚的に無効にされていない

私のすべてのUISwitchesの配列もあります。

viewDidAppearメソッドでは、私はUISwitchesの配列を反復して無効にします。

すべて正常です。

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

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

答えて

2

問題は、セルが再利用されているため、セルスイッチが再利用されていることです。セルは== nilのはコメントアウト、そうされている場合、細胞が再利用されることはありませんことを

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; 
     } 
    } 

//} 

お知らせ:一つの解決策は、ない再利用すなわちを得るためにあなたの細胞を強制することです。明らかにメモリなどを節約するのには大したことではありませんが、大きなテーブルビューや奇妙なテーブルビューがない場合は、気付かないかもしれません。

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

+0

@AndréCytryn:コーダーの2番目の提案が優れています。セル再利用には理由があります。 'cellForRowAtIndexPath:' –

+0

でこれを処理してみてください。しかし、ブール値の配列はどうすればいいですか?そのスイッチが淡色にならないようにする方法を教えてください。 –

+0

@AndréCytryn:ブール値の配列はcellviewのインデックスに対応します。cellForRowAtIndexPathで知ることができます:特定のスイッチを有効または無効にする必要がある場合。 –

関連する問題