2012-04-19 2 views
0

모든 셀에 accessoryView로 UISwitch가있는 UITableView가 있습니다.UITableViewCell ID의 UISwitch가 시각적으로 사용 중지되지 않았습니다.

또한 모든 UISwitches 어레이가 있습니다.

viewDidAppear 메서드에서 나는 UISwitches의 배열을 반복하고 비활성화합니다.

모두 정상적으로 작동합니다.

문제는 내가 UITableView를 위아래로 움직이면 숨겨진 UISwitches가 다시 표시되고 흐리게 표시되지 않습니다. 의도 한대로 작동하지 않지만 활성화 된 것처럼 보입니다.

어떻게 해결할 수 있습니까?

답변

2

문제는 셀이 재사용되고있어 셀 스위치가 재사용되고 있다는 것입니다. 셀 == 전무는 주석, 그렇게되면 세포가 재사용되지 않습니다 것을

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

//} 

주의 사항 : 하나 개의 솔루션이 아닌 재사용 예를 얻기 위해 당신의 세포를 강제하는 것입니다. 분명히 메모리 등을 보존하는 데는별로 좋지 않지만, 크거나 별난 tableview가 없다면 눈치 채지 못할 것입니다.

시도 할 수있는 또 다른 방법은 스위치를 검사해야하는지 여부를 결정하는 부울 값 배열을 유지하고 cellForRowAtIndexPath 메서드에서 해당 배열을 사용하는 것입니다.

+0

@ AndréCytryn : 코더의 두 번째 제안이 더 좋습니다. 셀 재사용은 이유가 있습니다. 'cellForRowAtIndexPath :' –

+0

에서 이것을 처리해보십시오.하지만 boolean 배열을 어떻게해야합니까? 스위치가 흐려지지 않는 것을 어떻게 돕는 지 명확하지 않습니다. –

+0

@ AndréCytryn : 부울 배열은 셀 뷰의 인덱스와 일치하므로 cellForRowAtIndexPath에서 알 수 있습니다 : 특정 스위치를 활성화하거나 비활성화해야하는 경우. –

관련 문제