2017-08-27 63 views
0

我在Swift 3中有一個自定義的UITableViewCell(我們稱之爲MyCustomTableViewCell),它有一個標識符「CustomCell」。是否需要使用reuseIdentifier註冊自定義UITableViewCell?

如果我用我的自定義單元格不註冊它的重用,它工作正常

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! MyCustomTableViewCell 

    return cell 
} 

如果我嘗試通過

override func viewDidLoad() { 
    super.viewDidLoad()  

    myUITableViewThatIsIBOutlet.register(MyCustomTableViewCell.self, forCellReuseIdentifier: "CustomCell") 
} 

將其註冊爲重複使用,當我嘗試訪問表我得到了「致命錯誤:意外地發現零,而解包可選值」,我的自定義單元格中的UILabels顯示爲「無」(這可能是導致致命錯誤的原因)。

我註冊自定義單元格時發生了什麼錯誤,或者我不應該註冊自定義單元格以供重用?

+1

你註冊的單元格標識符是故事板嗎? –

+0

您需要爲表格手動註冊單元格的唯一時間是單元格是在xib文件中定義的,而不是在故事板中定義的,或者當您具有完全程序化的單元格時。 –

+0

如果你通過它的類註冊一個單元格,它必須自己創建所有的子視圖。沒有什麼從故事板或筆尖加載。 @TusharSharma:按課程註冊與故事情節無關。 – clemens

回答

0

是它,如果你使用:

tableView.dequeueReusableCell(withIdentifier: 

在你的榜樣,是有可能你已經添加的自定義標識的原型細胞在你的故事板?這可以解釋爲什麼它沒有手動註冊就可以工作。您需要註冊一個自定義單元,以便它可以出隊,並且兩種方法都能正常工作。你不需要兩個。

如果不清楚,請提供更多信息。我很樂意更新我的答案。

+0

啊,我確實添加標識符到故事板中的原型單元格。我沒有意識到註冊單元。謝謝澄清! –

+0

是的,這並不明顯。但是系統需要一種方法來了解你的細胞,蘋果公司爲你提供了一個IB和一個程序化的方法。 – Mozahler

相關問題