为什么UITableViewCell AccessoryView:将AccessoryView设置为等于UIImageV



我有一个自定义的UITableView,它有两种类型的单元格。一个单元格只设置为在选中标记类型的普通附件之间切换。另一个单元格设置为具有自定义图像作为附件类型。选择后,附件图像将变为相反的类型,显示"selected"(已选择)或"Unselected"(未选择)信息。

 if (self.selectedIndex == indexPath.row) {
                cell.accessoryView = self.selectedImageView;
            }else
                cell.accessoryView = self.unSelectedImageView;

如果重要的话,UIImageViews初始化如下:

-(UIImageView *)selectedImageView
{
    if (!_selectedImageView) {
        _selectedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Check"]];
    }
    return _selectedImageView;
}
-(UIImageView *)unSelectedImageView
{
    if (!_unSelectedImageView) {
        _unSelectedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"noCheck"]];
    }
    return _unSelectedImageView;
}

我看到有人回答了这个问题:UITableCell AccessoryView:将AccessoryView设置为UIImageView无限循环

他说:我自己已经找到了答案,但这是给其他需要它的人的:UIImageView不能共享,所以每个可见单元格都需要不同的UIImageView实例化。现在你知道了。

但我不知道为什么?

UIView只能是一个父视图的子视图,因此一旦将UIImageView添加到一个单元格中,就不能将其添加到任何其他单元格中。

UIImage没有这个限制,所以您可以修改代码,使其具有与现在相同的selectedImageunSelectedImage方法,甚至可以修改当前方法,使它们每次都返回一个新的UIImageView。

最新更新