2017-05-06 47 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"