[英]custom UITableViewCell reuse highlight issue
在我正在進行的項目中,已經有一個自定義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;
}
如果其他人想要自定義突出顯示和選定狀態,則解決方法是:
if (highlighted || self.isSelected)
這將迫使它跳到if塊中,因為當您選擇它時,您希望它是突出顯示和選定狀態的顏色(假設它們是相同的顏色)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.