我有一个定制的UITableView,它有两种类型的单元格。一个单元格设置为在一个类型为checkmark的普通附件之间切换。另一个单元格设置为具有自定义图像作为附件类型。当被选中时,该附件图像将更改为其相反的类型,显示“选定”或“未选定”消息。
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: Setting accessoryView equal to UIImageView infinite loop
他说:我自己想出了答案,但这是给其他需要它的人的: UIImageViews不能共享,所以每个可见单元格都需要对每个UIImageView进行不同的实例化。现在你知道了。
但我不知道为什么?
发布于 2016-04-07 12:05:34
UIView只能是父视图的子视图,因此一旦将UIImageView添加到一个单元格中,就不能将其添加到其他单元格中。
UIImage没有这个限制,所以您可以修改代码,使其具有与现在相同的selectedImage和unSelectedImage方法,甚至可以修改当前的方法,以便它们每次都返回一个新的UIImageView。
https://stackoverflow.com/questions/36475347
复制相似问题