如何以编程方式使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
使用 java 以编程方式下载 Oracle Business Intelligence 报告