2012-05-11 23 views
0

//實際問題
我需要幫助加載使用規定以外的不同的小區標識筆尖文件(tableviewcell)在筆尖。如何使用比筆尖文件中指定的一個不同的小區標識加載的tableview細胞

//背景上我在做什麼
我有一個自定義的UITableViewCell有幾個標籤,幾張圖片,和幾個按鈕。所有這些都放在一個筆尖文件中。 tableview單元格的內容需要根據某些條件動態改變,即如果沒有顯示一個按鈕的樣式,如果沒有內容顯示在標籤中,則標籤不顯示等。左側的相鄰標籤/視圖應擴展以填充缺少的標籤/按鈕的空間。

我能夠得到這個工作。我這樣做的方式是cellForRowAtIndexPath
- 刪除不需要使用removeFromSuperView顯示的意見,並通過
- 調整frame並呼籲setNeedsDisplay爲需要調整的看法。

我使用nib文件中提到的相同單元標識符來使單元出隊。如果返回的單元格爲零,則使用loadNibNamed:withOwner:options加載筆尖。但是,恐怕這會在來回滾動時造成問題,因爲重新使用的單元格可能沒有在條件未滿足時顯示內容所需的視圖,因爲它們可能已被刪除。

要解決此問題,我打算爲不同的條件使用不同的單元標識符,以觸發單元格的不同外觀。或者,我也正在考慮只隱藏視圖並將相鄰視圖延伸到隱藏視圖上。這樣我就不需要處理不同的單元格標識符。

EDIT2:
我藏身的替代方法和相鄰視的調整框架工作了我的需求。

但是我仍然想找到我上面描述的實際問題的答案。

//
我想知道如果我可以經由loadNibNamed函數的options參數傳遞小區標識符到筆尖加載代碼潛在的解決方案。這可能嗎?如果你們可以提供一個示例代碼來實現這將是非常棒的。

謝謝你的時間。

+0

這是一個有原型單元格的故事板,還是您自己的自定義單元格中的自定義單元格? – jrturton

+0

自定義單元格在自己的筆尖;沒有故事板。 – avi

回答

0

您只需在不同的標識符的筆尖上創建多個單元格,然後用適當的標識符調用dequeueReusableCellWithIdentifier即可獲得對相應類型單元格的引用。

+0

感謝您的回覆;我考慮過這個問題,但後來不想走這條路,因爲這意味着我創建了幾乎同一個單元格的副本,並且有很小的變化。關於這一點的壞處是對視圖進行細微調整會變得麻煩,因爲我不得不在多個副本上進行更改。我現在有一個單獨的iPhone和iPad的筆尖,當我需要對兩個版本都可用的視圖進行小小的更改時,這本身使我變得很瘋狂。 – avi

+0

好的,但你的問題是關於將單元標識符傳遞給nib加載代碼。這就是這樣做...... – lnafziger

+0

對不起,如果它不明顯,我的問題更多的是將一個單元格標識符傳遞給loadNibNamed函數,以便我可以動態創建具有不同標識符的單元格,而不必重複單元格並創建多個副本每次加載nib文件時,單元格都會對象。 – avi

-1

您不能更改nib中指定的單元重用標識符。 Reference。你所說的選項字典也不會爲你做這個。這些選項與筆尖中的代理對象有關。

而不是刪除子視圖,你最好只是隱藏它們。您可以讓IBOutletCollections更容易地批量隱藏/取消隱藏。如果需要,您可以將單元重置爲默認狀態prepareForReuse

看看UINib - 這樣可以更快地創建一個比loadNibNamed更快的對象,這將有助於您的滾動性能。

0

我對此解決方案並不感到自豪,可能會遇到問題,但我會嘗試從nib加載後設置單元的標識符。

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil].lastObject; 
    [self setValue:reuseIdentifier forKeyPath:@"_reuseIdentifier"]; 

    // ... 

    return self; 
} 
相關問題