2011-08-26 3 views
1

행을 선택하면 DoSelectRowAtIndexPath가 체크 표시기를 넣습니다. 내 테이블보기는 팝 오버에 있으며 화면에 수용 할 수있는 더 많은 데이터가 있습니다. 스크롤 할 때 체크 표시기가있는 경우로드되는 첫 번째 셀이 더 많은 행을 표시하도록 스크롤 할 때 문제가 발생합니다.didselectrowatindexpath 메서드가 제대로 작동하지 않습니다. tableview에 ipad 화면에 표시 할 수있는 것보다 많은 행이있는 경우

예를 들어 내 테이블보기에 30 개의 행이 있고 i 행을 화면에서 선택하면 화면에 15 행을 수용 할 수 있습니다. 더 많은 행을보기 위해 스크롤하면 16 행에도 체크 표시가 있습니다. 마찬가지로 2 행을 선택하고 17 행까지 스크롤하면 선택됩니다.

사용자가 한 번에 하나의 행만 선택해야합니다. 내 선택 행 아웃 인덱스 깊이가 일관되게 작동하지 않습니다. 누구든지 적절한 작업 vesion을 가지고 있다면이 문제를 해결하는 방법을 나에게 알려주거나 제안하십시오. 또한, 내 테이블보기에 두 개의 섹션이 있습니다. 따라서 사용자는 섹션 중 하나에서 하나의 행만 선택할 수 있습니다.

내 didSelectRowAtIndexPath 코드. 그들은 재사용 당신이 당신의 세포로 만들어

int newRow = [indexPath row]; 
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1; 

if (newRow != oldRow || (newRow == 0 && oldRow == 0)) { 
    UITableViewCell *cell = [bTableView cellForRowAtIndexPath:indexPath]; 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    UITableViewCell *oldCell = [bTableView cellForRowAtIndexPath:lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone; 
    lastIndexPath = indexPath; 

답변

2

변경은 cellforrowatindexpath 위임 방식으로 재설정해야합니다. 따라서이 메소드에서 셀을 반환하기 전에 재설정하십시오. 선택한 값을 유지하고 그에 따라 업데이트 할 변수가 있어야합니다. 따라서 기본적으로 데이터 소스는 셀이 아닌 선택된 행의 값을 보유 할 수 있어야합니다.

관련 문제