2017-05-06 23 views
0

我已經創建UITableViewController編程在viewDidLoad()編程方式創建的UITableViewController:與用戶定義的細胞

resultsController = UITableViewController(style: UITableViewStyle.plain) 
resultsController.tableView.register(MyTableCellTableViewCell.self, forCellReuseIdentifier: "userFoundCell") 
resultsController.tableView.dataSource = self 
resultsController.tableView.delegate = self 

然而,當我後來做

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

    var cell: MyTableCellTableViewCell? = tableView.dequeueReusableCell(withIdentifier: "userFoundCell", for: indexPath) as? MyTableCellTableViewCell 

    if (cell == nil){ 
     cell = MyTableCellTableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "userFoundCell") 
    } 

    cell!.lblTmp!.text = "test" 
    return cell! 
} 

cell從來都不是零,我測試

代碼崩潰:

fatal error: unexpectedly found nil while unwrapping an Optional value on cell!.lblTmp!.text = "test"

MyTableCellTableViewCell看起來像這樣

class MyTableCellTableViewCell: UITableViewCell { 
    @IBOutlet var lblTmp: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 
} 

IBoutlet連接在界面生成器到GUI元素。同一班級也在另一個地方使用。

+0

@Sulthan它已連接。或者至少在我的第二張表中,這是使用相同的類,但是從IB入口,所有工作 –

+0

你說標籤已連接,但你也說你沒有xib文件。既然你還沒有使用storyboard,你究竟是如何定義'MyTableCellTableViewCell'的視圖,以及你如何連接標籤? – Sulthan

+0

@Sulthan我有一個故事板 –

回答

5

如果你有自定義tableview單元格與xib和類,那麼你應該按照以下方式註冊你的單元格。

如果你有你的表視圖單元格廈門國際銀行的文件名,如「MyTableCellTableViewCell」這再與該行

resultsController.tableView.register(UINib(nibName: "MyTableCellTableViewCell", bundle: nil), forCellReuseIdentifier: "userFoundCell") 
+0

我沒有xib文件。 –

+0

那你是怎麼把** @ IBOutlet var lblTmp:UILabel!**這行寫入Custom table view cell的。 –

+0

我把它連接到故事板 –

1

創建細胞的這種模式是錯誤的更換您的行

resultsController.tableView.register(MyTableCellTableViewCell.self, forCellReuseIdentifier: "userFoundCell") 

if (cell == nil){ 
    cell = MyTableCellTableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "userFoundCell") 
} 

你應該這樣做(強制施法使用!在這裏適用於我的意見n):

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

如果此行崩潰,那麼這意味着您的自定義單元格未正確註冊。這將幫助你找出問題。

0

儘管該單元格不是零,但您似乎無法檢查lblTmp是否爲零。如果lblTmp爲零,則嘗試設置cell!.lblTmp!.text = "test"將與unexpectedly found nil while unwrapping an Optional value一起崩潰。你如何將lblTmp設置爲一個值?

0

你沒有做聲明的implicitily展開可選@IBOutlet var lblTmp: UILabel!

使用cell!.lblTmp.text = "test"代替後展開cell!.lblTmp!.text = "test"