2012-02-24 134 views
3

我已經得到了這些單元格,我已經設置了自定義背景顏色。背景色工作正常,當我選擇單元格,但是,當我向下滾動,備份,有兩種情況:所選的UITableViewCell背景顏色在滾動時發生變化

  1. 如果選擇不是很多細胞,就拿出來看的細胞有時會回來在選擇時使用默認的藍色。

  2. 如果大多數或所有的細胞都被選中,那麼外出的細胞就會回到預先存在的細胞中的一種顏色 - 即。我選擇所有單元格,向下滾動並返回,頂部的單元格與底部單元格(或至少其中一些單元格 - 其他單元格保留其自己的顏色)具有相同的顏色。

這裏是我有一個產生這的代碼:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *row = [tableView cellForRowAtIndexPath:indexPath]; 
    UIView *backview = [[UIView alloc] initWithFrame:row.frame]; 
    backview.backgroundColor = [colours objectAtIndex:indexPath.row]; 
    row.selectedBackgroundView = backview; 
} 

這就是爲細胞所選擇的方法改變了顏色。在這裏創建的細胞:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"eventTypeID"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    NSString *sEventType = [[self.eventTypes valueForKeyPath:@"name.text"] objectAtIndex:indexPath.row]; 
    cell.textLabel.text = sEventType; 
    return cell; 
} 

而且每個單元的顏色都在這裏設置:

- (void)loadView { 
    colours = [[NSMutableArray alloc] init]; 
    CGFloat red[] = {0.84,0.86,0.7,0.46,0.56,0.44,0.95,0.91,0.91,0.76,0.06,0.8,0.73,0.0,0.0,0.01,0.18,0.23,0.57,0.18}; 
    CGFloat green[] = {0.12,0.01,0.07,0.17,0.32,0.18,0.49,0.49,0.78,0.61,0.48,0.85,0.85,0.28,0.38,0.53,0.23,0.36,0.32,0.24}; 
    CGFloat blue[] = {0.34,0.5,0.2,0.53,0.55,0.31,0.18,0.18,0.12,0.27,0.14,0.1,0.49,0.1,0.37,0.49,0.4,0.41,0.55,0.40}; 
    for (int i = 0; i < 20; i++) { 
     [colours addObject: [UIColor colorWithRed:red[i] green:green[i] blue:blue[i] alpha:1.0]]; 
    } 
//Get data from server and parse it 
... 
} 

現在,我纔剛剛開始編程的iPhone,但我的猜測(這是一個百搭單順便說一句)是細胞正在cellForRowAtIndexPath重新創建,雖然一些屬性得到保存(如標題...)自定義背景不是。

以前有沒有人遇到過這種行爲?如果是這樣,你是如何解決它的?

編輯:即使怪異行爲:有時,如果你向後滾動向下和向上,比人選擇背景色的「默認」的細胞可以追溯到它的自定義一個。行爲似乎是隨機的。

+1

你在正確的軌道上:在cellForIndexPath細胞的顏色也應該「renwed」。現在我不在家裏的電腦上檢查我遇到過類似問題的項目。但是如果我記得正確的話,我必須在willDisplayCell中定義一個單元格的背景顏色:forRowAtIndexPath – 2012-02-24 15:46:17

回答

6

單元格背景色在很多地方都有設置,以確保顯示的背景是你想你需要使用一個:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

詳見this問題。如果您需要自定義選擇的顏色,那麼你應該繼承UITableViewCell,並覆蓋- (void)setSelected:(BOOL)selected- (void)setHighlighted:(BOOL)highlighted

+0

謝謝 - 這個技巧! – KerrM 2012-02-24 16:08:23

+0

您將要創建一個NSMutableArray來存儲所選行的索引路徑,這樣,您的willDisplayCell就可以知道將所選樣式應用於哪些單元格 – yoshyosh 2014-08-26 00:12:01