如何以编程方式使用 CellStyle = .value1 初始化/使用 UITableViewCells?

Posted

技术标签:

【中文标题】如何以编程方式使用 CellStyle = .value1 初始化/使用 UITableViewCells?【英文标题】:How do you initialize/use UITableViewCells with CellStyle = .value1 programmatically? 【发布时间】:2019-08-16 15:11:20 【问题描述】:

我想为我的单元格使用 Apple 给定的单元格样式 value1,但我不确定这是如何正确完成的。设置单元格样式的唯一可能方法是在Cell's initialization 期间,但我认为在这种情况下不需要子类化。

设置 CellType 的正确方法是什么? 我试图在 tableView(_:cellForRowAt:) 中完成它,但 dequeueReusableCell(withIdentifier:for:) 没有返回 Optional,这就是我的逻辑无法工作的原因。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCellIdentifier", for: indexPath)

    if cell == nil 
        cell = UITableViewCell.init(style: .value1, reuseIdentifier: "myCellIdentifier")
    

    // setup cell text and so on
    // ...

    return cell

【问题讨论】:

是什么阻止您使用 Storyboard 以所需的样式设置单元格?我认为正确的样式称为“Right Detail”,然后以常规方式将其出列就足够了。 @VladislavKovalyov 我目前正在学习如何以编程方式创建 UI,并希望摆脱 Storyboard。 【参考方案1】:

不要打电话给tableView.register(...)

相反,在cellForRowAt 中使用这种方法:

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

    // try to dequeue a cell
    var cv1 = tableView.dequeueReusableCell(withIdentifier: "cv1")

    // if that fails, create a new one
    if cv1 == nil 
        cv1 = UITableViewCell(style: UITableViewCell.CellStyle.value1, reuseIdentifier: "cv1")
    

    // just for sanity
    guard let cell = cv1 else  fatalError("Failed to get a cell!") 

    // set the cell properties as desired
    cell.contentView.backgroundColor = .yellow
    cell.detailTextLabel?.text = "Row \(indexPath.row)"
    return cell


【讨论】:

谢谢,这看起来不错。我会在星期一试一试,并在测试后将其标记为正确答案。出于好奇:我会通过创建一个单元子类并通过使用我的原始代码调用super.init(style: .value1, reuseIdentifier: reuseIdentifier) 来覆盖它的init(style:reuseIdentifier:) 来获得相同的结果,对吗? 一般来说,创建自己的单元子类是个好主意。假设您决定稍后添加其他元素?如果您对单元格进行了子类化,那么您将在此处进行更改。否则,您将不得不重组您的代码。 (当然,可能没什么大不了的……但要提前考虑。)

以上是关于如何以编程方式使用 CellStyle = .value1 初始化/使用 UITableViewCells?的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 中的 dataGridCells 上设置填充

使用 java 以编程方式下载 Oracle Business Intelligence 报告

以编程方式导入 Room 数据库

以编程方式缩放后使用鼠标滚轮时 D3.zoom 跳转

使用 BootstrapTable 添加行时使用 CellStyle

如何以编程方式使用自动布局以编程方式添加 UIview?