2011-08-03 6 views
0

5 행이있는 간단한 tableView를 만들었습니다. 셀에 UITableViewCellAccessoryCheckmark를 사용했습니다.action from UITableViewCellAccessoryCheckmark

버튼을 누르고 '확인 된'셀과 그렇지 않은 셀을 기준으로 작업을 수행하려고합니다. 사용자가 none, all, 1 등을 선택할 수 있습니다.

UITableViewCellAccessoryCheckmark를 사용하는 셀과 UITableViewCellAccessoryNone을 사용하는 셀을 확인하려면 어떻게합니까?

감사

편집! 내가 할 수있는 방법을 발견

... didSelectRowAtIndexPath에서

나는 한 다음 ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 

    NSUserDefaults *loginDefaults = [NSUserDefaults standardUserDefaults]; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) 
    { 
     oldCell.accessoryType = UITableViewCellAccessoryNone; 

    } else { 

     UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];  

     if (newCell.accessoryType == UITableViewCellAccessoryNone) 
     { 
      newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
    } 

    if ([oldCell.textLabel.text isEqualToString:@"All"]) { 

     if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) { 

      [loginDefaults setObject:@"YES" forKey:@"DownloadAll"]; 

     } else if (oldCell.accessoryType == UITableViewCellAccessoryNone) { 

      [loginDefaults setObject:@"NO" forKey:@"DownloadAll"]; 
     } 

    } else if 
집 주위

조금,하지만 난 단지 내 테이블에 5 일을 가지고 보기, 그것은 내가하고 싶은 것을 위해 잘 작동합니다.

이제 행동에, 나는 NSUserDefaults의 값을 확인하고 요소가 모델에 속하는 일입니다 확인하는 대해 따라

답변

0

정보를 작동합니다. 테이블 셀은 스크롤 할 때 다시 사용되기 때문에 테이블 자체에서 저장할 수있는 방법이 없습니다. 특정 시점에서 화면에 표시되는 것보다 메모리에 하나 또는 두 개의 셀만있을 수 있기 때문입니다.

그래서 모델 객체에 속성을 추가하고 셀을 탭하면 해당 객체를 업데이트하는 것이 좋습니다. 이렇게하면 UI 요소에 상태를 저장하도록 강요하지 않고도 모델에서 좋아하는 필터링 및 쿼리를 수행 할 수 있습니다. 디자인에 의해 안정적으로 수행 할 수는 없습니다.

어쨌든 시도하면 예상치 못한 행에 체크 표시가 나타나는 등 이상한 상황이 발생합니다. 셀 인스턴스가 다시 사용되기 때문입니다.

질문도 참조하십시오. Question 3240830, 매우 비슷합니다.