在我正在进行的项目中,已经有一个自定义的UITableViewCell,我已经确定问题在于重用该单元格。
这两种方法正在重写突出显示并选择:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
if (self.isCellEditing == NO) {
if (highlighted) {
self.customView.backgroundColor = [UIColor redColor];
} else {
self.customView.backgroundColor = [UIColor whiteColor];
}
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (self.isCellEditing == NO) {
if (selected) {
self.customView.backgroundColor = [UIColor redColor];
} else {
self.customView.backgroundColor = [UIColor whiteColor];
}
} else {
if (selected) {
self.editImageView.image = self.editAccessorySelectedImage;
} else {
self.editImageView.image = self.editAccessoryImage;
}
}
}
导致问题的应用程序中发生的事情是我需要在应用程序启动时关闭应用程序之前自动滚动并选择最后选择的单元格(在viewDidAppear中完成)。除了突出显示单元格之外,它确实可以滚动到单元格选择它,就像它在详细信息视图中显示的那样(iPad splitview设置),但单元格不会突出显示。这是一个重用问题,因为如果需要滚动到的单元格是加载时可见的第一个单元格之一,它将突出显示但是如果它是一个关闭屏幕的单元格并且滚动到该单元格它将选择但不突出显示它
ETA:单元重用覆盖:
- (void)prepareForReuse {
[super prepareForReuse];
self.selectionStyle = UITableViewCellSelectionStyleNone;
_cellEditing = NO;
_swipingToDelete = NO;
_editViewAnimated = NO;
}
答案 0 :(得分:0)
如果其他人想要自定义突出显示和选定状态,则修复程序为:
if (highlighted || self.isSelected)
这会强制它跳过这个if块,因为当它被选中时你想要它的高亮颜色和选择状态(假设它们是相同的颜色)