gpt4 book ai didi

ios - 为类似布局的 UITableViewCell 重用布局代码

转载 作者:行者123 更新时间:2023-12-01 22:06:35 25 4
gpt4 key购买 nike

我正在尝试复制内置的 Apple Reminders 应用程序。其中,有两种类型的单元格:一种用于显示提醒项目,另一种用于添加新项目:
Reminders table view cells
我不使用 Interface Builder,所以所有布局代码都包含在 UITableViewCell 中子类。在这里,我为提醒项目单元格创建了一个:

class ItemCell: UITableViewCell {
var leftButton: UIButton!
var middleLabel: UILabel!

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)

middleLabel = UILabel()
middleLabel.translatesAutoresizingMaskIntoConstraints = false

leftButton = UIButton(type: .custom)
leftButton.translatesAutoresizingMaskIntoConstraints = false
leftButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

contentView.addSubview(middleLabel)
contentView.addSubview(leftButton)

NSLayoutConstraint.activate([
leftButton.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0),
leftButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
middleLabel.leadingAnchor.constraint(equalTo: leftButton.trailingAnchor, constant: 8.0),
middleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 8.0),
middleLabel.centerYAnchor.constraint(equalTo: leftButton.centerYAnchor)
])
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

现在,如果我要创建另一个 UITableViewCell添加项目单元格的子类,它的许多布局代码都是相同的,只是 subview 的类型不同。仅复制和粘贴代码片段的最简单解决方案有其明显的缺陷,即不干净、可重用和优雅。

我可以假设更好的解决方案可能是使用继承、工厂类或协议(protocol),但很难找到针对此特定任务的最佳实践。

最佳答案

创建一个仅将 UIViews 作为参数并创建布局的函数。

然后创建一个从表格单元派生的基类并将该函数移到那里。

最后更改这个类以从新的基类派生

现在您的新单元格也可以从该类派生。

关于ios - 为类似布局的 UITableViewCell 重用布局代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com