从UITableViewCell的accessoryView中删除视图无法正常工作

时间:2012-07-27 04:42:04

标签: objective-c uiview uitableview accessoryview

我在我的单元格的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 =>后循环浏览这些状态没有勾 - >一个勾 - >双刻度(图像) - >没有勾选

非常感谢任何帮助,谢谢。

1 个答案:

答案 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;
}