2014-01-16 85 views
0

在我正在進行的項目中,已經有一個自定義的UITableViewCell,並且我確定問題在於單元的重用。自定義UITableViewCell重複使用突出問題

這2種方法都做了高亮的首要和選擇:

- (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

單元格的prepareForReuse方法是否被覆蓋? – chandu

+0

是的,加在上面。 –

+0

是不是isCellEditing您的自定義屬性?不應該在prepareForReuse中重置? – chandu

回答

0

倘若任何人想要一個自定義的亮點和選擇的狀態,修復是:

if (highlighted || self.isSelected) 

這將迫使它,如果這裏面跳塊,因爲當它被選中時,你需要它的高亮和選定狀態的顏色(假設它們是相同的顏色)