我在我的单元格的accessoryView中设置了一个带有图像的uiview,后来我想删除这个视图,以便可以再次显示accessoryType为none。以下不起作用 -
//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],但这也不起作用。
基本上我想在点击cell =>后循环浏览这些状态没有勾 - >一个勾 - >双刻度(图像) - >没有勾选
非常感谢任何帮助,谢谢。
答案 0 :(得分:5)
您的代码存在两个问题:
在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;
}