我正在尝试在自定义表格视图单元格内创建一个自定义复选框。
我有一个自定义表格视图单元格:
class CustomTableViewCell: UITableViewCell {
weak var delegate: CellDelegateT?
@IBOutlet var customCheckbox: VKCheckbox!
}
以下是加载我的tableView的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TransactionsTableViewCell
let customCheckbox = cell.customCheckbox!
customCheckbox.line = .thin
customCheckbox.bgColor = UIColor.white
customCheckbox.color = UIColor.black
customCheckbox.borderColor = UIColor.black
customCheckbox.borderWidth = 2
customCheckbox.cornerRadius = customCheckbox.frame.height / 2
}
我需要在哪里放置构成复选框的代码? cellForRowAt
是不正确的地方吗?
当我在表格单元格之外使用代码时,它可以正常工作。这就是为什么我认为我将复选框创建代码放置在错误的位置。
答案 0 :(得分:1)
您的问题答案是“是的,您应该将复选框设置放到另一个位置。特别是我建议您将其移至CustomTableViewCell
类”
有一种观点认为,良好的面向对象软件设计基于SOLID原则。
SOLID 是首字母缩写。 S 代表Single responsibility principle.。简而言之-一个类应该对一件事情负责,并且这种责任应该由该类封装。
在您的情况下,ViewController
负责Cell
的子视图布局和调整。在SOLID中至少破坏〜 S 〜
P.S。。老实说,由于经常会争论良好的软件设计,我有点害怕写这个答案。
答案 1 :(得分:1)
通常来说,建议您不要将构成复选框的代码放在cellForRowAt
中,因为@fewlinesofcode可以很好地说明这一点。以下是我个人建议回答您问题的两种其他选择。希望这会有所帮助...
选项1:
class CustomTableViewCell: UITableViewCell {
@IBOutlet var customCheckbox: VKCheckbox!
func checkBoxControl() {
customCheckbox.line = .thin
customCheckbox.bgColor = UIColor.white
customCheckbox.color = UIColor.black
customCheckbox.borderColor = UIColor.black
customCheckbox.borderWidth = 2
customCheckbox.cornerRadius = customCheckbox.frame.height / 2
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TransactionsTableViewCell else { return UITableViewCell() }
cell.checkBoxControl()
return cell
}
选项2:
class CustomTableViewCell: UITableViewCell {
@IBOutlet var customCheckbox: VKCheckbox!
override func awakeFromNib() {
super.awakeFromNib()
customCheckbox.line = .thin
customCheckbox.bgColor = UIColor.white
customCheckbox.color = UIColor.black
customCheckbox.borderColor = UIColor.black
customCheckbox.borderWidth = 2
customCheckbox.cornerRadius = customCheckbox.frame.height / 2
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TransactionsTableViewCell else { return UITableViewCell() }
return cell
}