详细信息TextLabel和ImageView无法在表观视图单元格上访问



我正在使用Xcode版本8.2.1(8c1002) - 因此,我相信Swift 3-尝试使用默认值以外的单元格制作表视图,并且似乎无法获得细胞详细信息图纸或细胞图像视图除外。

我将项目的部署目标设置为通用设备上的9.0。

在接口构建器中,我已将内容建立为具有1个原型单元格的动态原型。

在接口构建器中,我将该表查看单元格样式设置为"正确的细节",其中图像" Animal08.png"one_answers" 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语句"时,我会得到:

"致命错误:在解开可选值时出乎意料地发现了零"

同样,尝试访问ImageView属性的尝试nil。

肯定的是,打印(cell.subviews.count)语句揭示了该单元格的1个子视图。除了通过接口构建器或INIT(style:uitaiteViewCellStyle,reuseIdentifier:string?)initializer。

我相信使用Init方法会击败Dequeuereusablecell的好处,在这种情况下不应使用。

我已经读过(没有证实)tableview.register方法将tableViewCellstyle重置为默认。

上面的代码似乎与Apple开发人员网站上的样板代码相同,并且由广泛的贡献者进行了众多教程。

那么,我如何访问detailtextlabel和imageView子视图并仍然使用排名的单元格?

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

关于您尝试的其他东西:

顺便说一句,打印cell.subviews.count不会给您任何可用值,因为UITableViewCell 中的所有子视图均应添加中的(并且默认子视图)在其-contentView(Cell属性)中。

也使用-initWithStyle:reuseIdentifier:初始化的单元格没有额外的缺点,因为您仍然可能使用重复使用机制并同时指定所需的单元格式。当重复使用界面构建器中指定的属性的故事板定义的单元格时,脱水实际上具有更大的意义。

最新更新