2013-01-16 222 views
0

我有一個自定義UITableViewCell分類爲ItemDetailCell其中有許多出口連接到我的故事板文件。其中有一個自定義UIView分類爲PriorityView,它在nib文件中有一個出口到UIView(priorityStatusView)。自定義UIView自定義UITableViewCell

@property (weak, nonatomic) IBOutlet PriorityView *redPriorityView; 

在nib文件(PriorityView.xib)中,我已將文件所有者自定義類連接到PriorityView。在PriorityView.m我使用加載在drawRect筆尖文件:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"PriorityView" owner:self options:nil]; 
[self addSubview:[array objectAtIndex:0]]; 

在我的表視圖控制器的cellForRowAtIndexPath我想設置的redPriorityView.priorityStatusView背景顏色,但首先我打電話drawRect使筆尖加載。我沒有使用initWithFrame加載筆尖的原因是,除了不加載筆尖之外,它似乎使PriorityView無效。我的懷疑是這樣的,因爲視圖已經加載了IBOutlet。我知道它是空的,因爲我呼籲:

NSLog(@"%@, %@", detailCell.redPriorityView, detailCell.redPriorityView.priorityStatusView); 

並且都返回null。但是,使用drawRect加載該筆尖會將兩個日誌都返回爲非空。我現在我遇到的唯一問題是,背景顏色不會改變使用:

detailCell.redPriorityView.priorityStatusView.backgroundColor = [UIColor yellowColor]; 

我也用setBackgroundColor無濟於事嘗試。實際上,redPriorityViewredPriorityView.priorityStatusView的屬性似乎都沒有改變。背景顏色只是一個例子。

對不起,我只是很難做出這項工作。預先感謝任何幫助!

編輯

我曾嘗試在ItemDetailCell使用方法設置redPriorityView的屬性,並通過調用cellForRowAtIndexPath,但即使在該方法中NSLog被稱爲屬性不會改變。我認爲問題可能在於如何將視圖連接到PriorityView文件。

+0

很難確切地告訴你在這裏做什麼,但是使用drawRect不是一條可行的路。對於從筆尖出來的東西,你想使用initWithCoder而不是initWithFrame。一個更基本的問題是,爲什麼你要爲priorityStatusView使用單獨的nib文件,而不是在你的ItemDetailCell中首先創建它? – rdelmar

+0

@rdelmar我在detailCell中使用了三次視圖。當最終它將有一個子視圖和點擊手勢識別器,所以我認爲如果我將其分類,就會更容易控制'UIView'的所有功能。 –

+0

@rdelmar此外,無法將手勢識別器添加到原型單元格。所以使用自定義視圖似乎是我唯一的選擇。 –

回答

0

執行- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath方法,並嘗試設置背景顏色。希望這可以幫助!

+0

爲什麼使用這個而不是'cellForRowAtIndexPath'? –

+0

我剛剛嘗試過使用它,但不幸的是它沒有任何區別。 –

+0

「表視圖在它使用單元格繪製一行之前將其發送給其委託,從而允許委託在顯示之前自定義單元對象。此方法使委託有機會覆蓋先前設置的基於狀態的屬性由表格視圖,如選擇和背景顏色。「 – Levi

0

嘗試設置您的訪問器強。也許...