2016-07-26 84 views
0

我有一個包含UICollectionView的視圖控制器。它重新使用爲原型單元格指定的標識符ValveCell。它使用名爲ValveViewCell的UICollectionViewCell的自定義子類。如何根據給定值更改UICollectionViewCell的背景顏色

我已經在使用Storyboard的原型單元上放了幾個文本標籤,我可以得到不同的值以顯示在多個單元格中沒有問題。目前有4個單元,顯示來自4個不同閥門的信息。

我想要做的只是改變單元的背景顏色,取決於閥門是打開還是關閉(我可以成功測試的一個布爾值)。

我使用這個代碼:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    ValveViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ValveCell" forIndexPath:indexPath]; 

    Valve *valve = [valveArray objectAtIndex:indexPath.row]; 

    cell.valveID.text = [valve.valveID stringValue]; 
    cell.valveLabel.text = valve.valveLabel; 
    cell.valveStatus.text = valve.status; 

    if ([valve isOn]) { 
    [cell setBackgroundColor:[UIColor greenColor]]; 
    } else { 
    [cell setBackgroundColor:[UIColor redColor]]; 
    } 

    return cell; 
} 

的問題是,它改變背景顏色,但它改變了每一個細胞的背景顏色,而不只是當前單元格中。有任何想法嗎?提前致謝!

+0

你是什麼意思由當前單元?它選擇了細胞嗎? –

+1

'[cell.contentView setBackgroundColor:[UIColor greenColor]];' – Fabian

+0

我的意思是,當它遍歷數組中的每個項目時,它應根據爲特定單元格設置的閥門來更改特定UICollectionViewCell的顏色。事實證明,它實際上與UICollectionViewCell根本沒有任何關係,它是基於邏輯的一個壞的價值。由於該值實際上總是返回零,因此它將每個單元格更改爲相同的顏色。 – fuddus

回答

0

簡單修復!把它作爲你的方法的第一行!

ValveViewCell *cell = [[ValveViewCell alloc] init] 

,然後改變

ValveViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ValveCell" forIndexPath:indexPath]; 

cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ValveCell" forIndexPath:indexPath]; 

你引用同一個小區整個的CollectionView所以初始化每個單元格將解決您的問題。

相關問題