2012-04-03 61 views
21

用故事板,靜態細胞,cellForRowAtIndexPath:故事板靜態細胞:dequeueReusableCellWithIdentifier返回nil

UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

總是返回nil

我已經檢查了以下內容:

小區的
  • 標識符在IB /故事板設置正確,我使用相同的標識符的代碼。我多次證實了這一點。
  • 我沒有在其他地方實例化視圖控制器(這是this stackoverflow question中的問題)。

我的視圖控制器是UITableViewController一個子類,當然,包裹成在一個情節串連圖板特設導航控制器。懷疑我的視圖控制器不知道故事板中定義的單元格標識符,因爲它可能是另一個實例,這裏是「實例化」它的代碼。在prepareForSegue:,我用

CustomViewController *vc = [[[segue destinationViewController] 
    viewControllers] objectAtIndex:0]; 

在這裏完成視圖控制器的其他自定義(設置屬性等)的正常工作。

我使用的是靜態單元,因爲節和行的數量沒有變化,並且每個單元格都包含靜態文本(以及其他控件或要編輯的文本字段)。

在我看來,這是一個非常普遍的任務(從視圖控制器的數據源方法中的故事板中定製靜態單元格)。我究竟做錯了什麼?

+0

您將不得不向我們展示您實際處理創建自定義單元格的位置。這是重要的部分。 – borrrden 2012-04-03 13:12:43

+0

我在故事板中創建自定義單元格。鍵入「自定義」和它自己的單元標識符。它不是那樣工作嗎? – Mundi 2012-04-03 14:02:58

+0

我錯過了整個靜態部分。靜態單元完全在故事板中設計。見這個優秀教程的第2部分www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2 – borrrden 2012-04-03 14:11:32

回答

44

靜態內容在表格視圖中,您不會實現任何數據源方法(包括tableView:cellForRowAtIndexPath:,因此您永遠不會出列單元格。不會出現靜態內容的出列(無論如何您都可以參與) 。

如果你想獲得一個指向一個特定的細胞:使用cellForRowAtIndexPath:

  • 從表中獲取該對象

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    
  • 有特定單元的出口並直接對其進行定製。

  • 迭代通過細胞和檢查reuseIdentifier屬性,讓你感興趣的細胞。

所有的這些東西都可以在viewWillAppear中或類似的工作要做。

如果您希望單元格中的內容與故事板上的內容完全不同,那麼靜態單元格可能不是正確的選擇。您應該使用傳統的數據源方法來使用動態原型(注意故事板中可以有多個原型)。

+0

謝謝 - 所以爲了我想要做的事情,似乎我確實需要使用原型單元格。你可以在你的答案中加上這個,所以我可以檢查它嗎?感謝您的澄清! – Mundi 2012-04-03 13:22:08

+0

編輯我的答案,你實際上沒有說你想做什麼,所以希望它有幫助! – jrturton 2012-04-03 13:30:48

+0

我試圖在一些單元格中使用靜態標題標籤和可編輯文本字段,而其他一些控件則使用其他控件。我認爲你可以將數據動態地填充到靜態單元格中。單元格的數量或位置不變。我已經開始用原型單元來做這件事了,它的工作量非常大 - 幾乎比故事板還要糟糕! – Mundi 2012-04-03 13:57:09

0

解決方案是使用原型單元而不是靜態單元。我仍然把支票交給@ jrturton,因爲他是第一個讓我這個想法的人。

我剛剛解決了另一個有趣的錯誤:使用「Custom」類型的原型單元格,如果您嘗試使用文本填充cell.textLabel,它將自動工作,但所有其他子視圖的行爲非常奇怪。我現在只使用我的自定義標籤,並且一切正常。

乾杯,謝謝大家的幫助。

+0

你是如何使用「Custom」Cell的?因爲dequeueReusableCellWithIdentifier返回nil? – 2014-04-04 05:31:45

+0

您可以在Interface Builder中指定「自定義」。 – Mundi 2014-04-04 11:15:32

+0

我確實在Interface Builder中指定了Custom,然後我將UITableViewCell分類並分配給它。但它帶來了空虛的動態細胞。 – 2014-04-05 01:31:25

0

不同的上述回答,

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

將無法​​正常工作。但是提到的創建cell插座的方法正在工作。

也可以在cell上放置視圖,例如UIButtonsUITextFields,並且也有這些視圖。

兩種方法也可以組合使用。例如。爲特定單元格設置cell.textLabel.text,並擁有另一個控件,該控件將從控件出口訪問。

0

在故事板中,Static Cells不能實現<UITableViewDataSource>協議中的方法。

因此,您可以使用哪些方法包含在<UITableViewDelegate>中。

0

您仍然可以使用靜態的UITableView的dataSource/delegate方法,您只需不必創建新的單元格。

如果要修改細胞與數據源的方法,裏面cellForRowAtIndexPath:

UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

,然後開始修改單元格。

相關問題