문제

내 셀의accessoryView에 이미지가 포함된 uiview를 설정했고 나중에 이 보기를 제거하여accessoryType이 다시 없음으로 표시될 수 있도록 하고 싶습니다.다음은 작동하지 않습니다 -

  //create cell
        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];

        //initialize double tick image
        UIImageView *dtick = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dtick.png"]];
        [dtick setFrame:CGRectMake(0,0,20,20)];
        UIView * cellView = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];
        [cellView addSubview:dtick];

 //set accessory type/view of cell
        if (newCell.accessoryType == UITableViewCellAccessoryNone) {
            newCell.accessoryType = UITableViewCellAccessoryCheckmark;
            }
        else if(newCell.accessoryType == UITableViewCellAccessoryCheckmark){
                newCell.accessoryType = UITableViewCellAccessoryNone;
                newCell.accessoryView = cellView;
            }
        else if (newCell.accessoryView == cellView) {
            newCell.accessoryView = nil;
            newCell.accessoryType = UITableViewCellAccessoryNone;
          }

또한 [newCell.accessoryView reloadInputViews]를 시도했지만 그것도 작동하지 않습니다.

기본적으로 셀 클릭 시 이러한 상태를 순환하고 싶습니다. => 체크 없음 -> 체크 한 개 -> 이중 체크(이미지) -> 체크 없음

도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

코드에 두 가지 문제가 있습니다.

  • ~ 안에 newCell.accessoryView == cellView 셀의 액세서리보기를 새로 만든 이미지보기와 비교합니다.이 비교는 결코 TRUE를 산출하지 않습니다.

  • 액세서리 보기를 이미지로 설정하면 유형도 다음으로 설정됩니다. UITableViewCellAccessoryNone, 다음번에는 다음으로 설정됩니다. UITableViewCellAccessoryCheckmark 다시.즉, 두 번째 else if 블록은 절대 실행되지 않습니다.

다음 코드는 작동할 수 있습니다(그러나 직접 시도하지는 않았습니다).

if (newCell.accessoryView != nil) {
     // image --> none
     newCell.accessoryView = nil;
     newCell.accessoryType = UITableViewCellAccessoryNone;
} else if (newCell.accessoryType == UITableViewCellAccessoryNone) {
     // none --> checkmark
     newCell.accessoryType = UITableViewCellAccessoryCheckmark;
} else if (newCell.accessoryType == UITableViewCellAccessoryCheckmark) {
     // checkmark --> image (the type is ignore as soon as a accessory view is set)
     newCell.accessoryView = cellView;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top