2013-01-18 7 views
1
  1. 아래 코드는 선택한 셀 옆에 체크 표시를하고 싶을 때 작동합니다.세 번째 시간에 동일한 UITableViewCell을 선택하면 강조 표시되지 않고 액세서리가 추가됩니다. 확인 표시

  2. 다른 셀을 선택하려고 할 때도 작동합니다. 마지막 셀 또는 강조 표시를 선택 취소하고 새 선택한 셀 옆에 체크 표시를하고 강조 표시합니다.

  3. 선택 셀을 선택 취소 할 때 선택 셀을 선택 취소 할 때도 작동하며 선택 표시를 해제하고 UITable에서 강조 표시합니다.

  4. 그러나 동일한 셀을 세 번째로 선택하면 (즉, 먼저 코드를 선택하고 코드를 강조 표시 한 다음 옆에 체크 표시를하고 같은 셀을 두 번째로 선택하고 강조 표시 및 확인 표시가 있으면 세 번째로 동일한 셀을 선택합니다) 셀을 초 단위로 강조 표시하고 하이라이트가 사라집니다. 셀 옆의 체크 표시는 마치 내가 선택을 취소 한 것처럼 나타나지 않습니다. 동일한 셀을 몇 번 선택하든 관계없이 강조 표시하거나 옆에 체크 표시를하지 않습니다. 이를 수행하는 유일한 방법은 먼저 다른 셀을 선택한 다음 원래 셀을 다시 선택하는 것입니다. 도와주세요.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

    // select new 

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    [cell setSelected:TRUE animated:TRUE]; 

    // deselect old 
    UITableViewCell *old = [self.tableView cellForRowAtIndexPath:self.lastSelected]; 

    old.accessoryType = UITableViewCellAccessoryNone; 
    [old setSelected:FALSE animated:TRUE]; 


    // keep track of the last selected cell  
    self.lastSelected = indexPath; 

} 

나는 스토리 보드를 통해 jQuery과 내장. 이 논리의

답변

1

그냥 작은 조정 : 일

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    if (self.lastSelected && (self.lastSelected.row == indexPath.row)) { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
     [cell setSelected:NO animated:TRUE]; 
     self.lastSelected = nil; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     [cell setSelected:TRUE animated:TRUE]; 

     UITableViewCell *old = [self.tableView cellForRowAtIndexPath:self.lastSelected]; 
     old.accessoryType = UITableViewCellAccessoryNone; 
     [old setSelected:NO animated:TRUE]; 
     self.lastSelected = indexPath; 
    } 
} 
+0

. 감사합니다 @ 앤드류! – user1107173