我正在使用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子视图并仍然使用出列的单元格?
答案 0 :(得分:0)
您应该将单元格样式更改为UITableViewCellStyleDefault
以外的值。在这种情况下,AFAIK也不需要展开。
关于您尝试的其他内容:
顺便说一下,打印cell.subviews.count
不会为您提供任何可用的价值,因为UITableViewCell
中的所有子视图都应添加(及默认子视图)在其{{1}内(cell属性)。
同样使用使用-contentView
初始化的单元格没有任何额外的缺点,因为您仍然可以使用重用机制以及同时指定所需的单元格样式。当重新使用Storyboard定义的单元格与Interface Builder中指定的属性时,实际上更有意义。