2010-10-05 38 views
3

在我的應用程序中,我有一個用於顯示背景色設置的UITableViewCell。在detailTextLabel中,它顯示背景設置爲實際顏色的顏色名稱,例如[UIColor cyanColor]。請注意,我只設置detailTextLabel的背景,而不是整個UITableViewCell。當用戶點擊單元格時,它們會被帶到另一個UITableView,讓它們選擇一種顏色,當它們返回到之前的UITableView時,UILabel的backgroundColor會更新爲新顏色。UITableViewCell中的UILabel backgroundColor始終回覆到初始值

問題是,無論何時我回到最初的UITableView,UILabel的backgroundColor會立即更新,然後返回到初始顏色。我無法找出它爲什麼會恢復原狀。有什麼建議麼?

謝謝!

+0

沒有源代碼很難說,但我猜你的cellForRowAtIndexPath被調用並將你的單元恢復到它的初始狀態。 – 2010-10-05 17:40:03

回答

8

一些基於狀態的屬性由表視圖設置;我相信背景顏色就是其中之一。換句話說,表視圖正在改變detailTextLabel的背景顏色,可能是不重視選擇的一部分。

在表視圖設置基於狀態的屬性之後,表委託給出了最終機會來更新每個單元的外觀。這是在代表的tableView:willDisplayCell:forRowAtIndexPath:方法中完成的。也許如果你在這個方法中設置detailTextLabel的背景顏色,你的問題就會消失。

0

當執行cellForRowAtIndexPath時,它通常會創建並返回一個新的單元格。

從你的問題,目前還不清楚你是否正在重建細胞,但如果你是,這可以解釋你描述的行爲。

0

是的..也許你沒有在cellForRowAtIndexPath方法中重新使用你的單元格。 如果是,請嘗試重新使用您的單元格,而不是每次創建新單元格。

0

我固定這個問題的方法是創建名爲HighlightedLabel一個UILabel子類,其具有以下初始化劑:

- (id)initWithHighlightedBackgroundColor:(UIColor *)highlightedBackgroundColor nonHiglightedBackgroundColor:(UIColor *)nonHighlightedBackgroundColor 
    { 
     self = [super init]; 
     if(self) 
     { 
      _highlightedBackgroundColor = highlightedBackgroundColor; 
      _nonHighlightedBackgroundColor = nonHighlightedBackgroundColor; 
      self.backgroundColor = nonHighlightedBackgroundColor; 
     } 
     return self; 
    } 


    -(void)setHighlighted:(BOOL)highlighted 
    { 
     if(highlighted) 
     { 
      self.backgroundColor = self.highlightedBackgroundColor; 
     } 
     else 
     { 
      self.backgroundColor = self.nonHighlightedBackgroundColor; 
     } 
    } 

然後,當我分配該小區予指定高亮和非高亮背景顏色。

這很好用 - 當我選擇顏色的單元格是我想要的。