在表视图单元格上无法访问detailTextLabel和imageView

时间:2017-03-03 15:09:49

标签: ios swift uitableview tableviewcell

我正在使用Xcode版本8.2.1(8C1002) - 我相信Swift 3 - 尝试使用默认以外的单元格进行表格查看,并且似乎无法获取单元格detailTextLabel或单元格imageView不是零。

我已在Universal Devices上将项目的部署目标设置为9.0。

在界面构建器中,我使用1个原型单元建立了内容为动态原型。

在界面构建器中,我将表视图单元格样式设置为“右侧详细信息”,图像为“animal08.png”,标识符为“PlayerCell”。

在表视图的视图控制器中,在override func viewDidLoad()中:

self.tableView.register(UITableViewCell.self,forCellReuseIdentifier:" PlayerCell")

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "PlayerCell")!
    print(cell.subviews.count)
    cell.textLabel!.text = "Name: " + myNames[indexPath.row]
    cell.detailTextLabel!.text = "Ranking: " + myRankings[indexPath.row].description
    let avatarIndex = indexPath.row + 1
    let avatarIndexName = "animal0" + avatarIndex.description
    cell.imageView!.image = UIImage.init(named: avatarIndexName)

    return cell;
}

当我在iPhone 5 iOS 5.2(13C75)模拟器上运行该程序时,当我到达“cell.detailTextLabel!.text语句时,我得到:

“致命错误:在解开可选值时意外发现nil”

同样,访问imageView属性的尝试找到nil。

果然,print(cell.subviews.count)语句显示该单元只有1个子视图。 除了通过接口构建器,或者在init(样式:UITableViewCellStyle,reuseIdentifier:String?)初始化器中,我看不到UITableViewCell的设置或获取UITableViewCellStyle属性。

我相信使用init方法会破坏dequeueReusableCell的好处,并且不应该在这种情况下使用。

我已经阅读(没有证据)tableview.register方法将tableViewCellStyle重置为默认值。

以上代码似乎与Apple Developer网站上的样板代码相同,并且由众多贡献者提供了大量教程。

那么,我如何访问detailTextLabel和imageView子视图并仍然使用出列的单元格?

1 个答案:

答案 0 :(得分:0)

您应该将单元格样式更改为UITableViewCellStyleDefault以外的值。在这种情况下,AFAIK也不需要展开。

关于您尝试的其他内容:

顺便说一下,打印cell.subviews.count不会为您提供任何可用的价值,因为UITableViewCell 中的所有子视图都应添加(及默认子视图)在其{{1}内(cell属性)。

同样使用使用-contentView初始化的单元格没有任何额外的缺点,因为您仍然可以使用重用机制以及同时指定所需的单元格样式。当重新使用Storyboard定义的单元格与Interface Builder中指定的属性时,实际上更有意义。