在tableViewCell中设置TextLabel的文本

时间:2016-12-30 15:59:38

标签: ios swift uitableview tableview

我来找你一个小问题,这可能实际上并不复杂,但我现在已经挣扎了一个小时......

我在TableViewController中定义了一个TableViewCell。这个TableViewCell有三个UIImage和两个textLabel。我实现了以下方法:

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return fruits.count
}

(在我看来,它定义了行数)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell")   
    cellOutlet.nameTextLabel.text = fruits[indexPath.row]
    return cell!
}

在第二种方法中," cellOutlet"是定义我的单元格的类的实例,我在其中修改textLabel的一个文本。 "水果"是一个简单的字符串数组,应该逐个显示在我的应用程序的每个单元格中。

编辑很顺利,但在访问相关页面时,应用程序崩溃说

  

在解包可选值时意外发现nil

我的问题如下:

您是否知道在访问我的textLabel文本方面出了什么问题?

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果您使用的是自定义TableViewCell类,则必须

  • 将Interface Builder中的单元格类设置为自定义类
  • cellForRow...中相应地投放单元格(假设名称为MyTableViewCell

    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell" for:indexPath) as! MyTableViewCell 
    

答案 1 :(得分:0)

尝试致电

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell")   
    cell.nameTextLabel.text = fruits[indexPath.row]
    return cell!
}

并且在调用cell.nameTextLabel.text = fruits[indexPath.row]

时也检查“cell”不应为nil

答案 2 :(得分:0)

即使你的自定义UITableViewCell类(例如FruitsCell)有一些标签,标准的UITableViewCell也不会(除了一个,它的'label'属性)。在您的代码中,'cell'属性的类型为UITableViewCell,它没有要访问的cellOutlet或nameTextLabel属性。

如果您在IB中设置自定义单元格,请务必将IB中的所有标签与Swift-File中的代码相关联,例如: FruitsCell.swift,包含FruitsCell类。

然后将ViewControllers委托方法中的'单元格'转换为例如FruitCell而不是UITableViewCell。只有这样,您才能访问在IB中设置的该类的标签。

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

    // casting to your Class
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell") as! FruitCell   

    // accessing that Class' properties
    cell.nameTextLabel.text = fruits[indexPath.row]

    // returning cell of type FruitCell
    return cell!
}