UITableViewCell의accessoryView에서 뷰 제거가 작동하지 않습니다.
-
12-12-2019 - |
문제
내 셀의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;
}
제휴하지 않습니다 StackOverflow