我有一个观点,我在tableView中用作标题。视图很简单,里面只有标签。如果我在其中定义一个带有字符串赋值的自定义init并不起作用的问题。
代码如下
class ProducutDetailsTableViewHeader: UIView {
var sectionTitle: UILabel = {
var label = UILabel()
label.textAlignment = .left
label.font = UIFont(name: "Lato-Regular", size: 13)
label.textColor = UIColor.init(red: 107/255, green: 107/255, blue: 118/255, alpha: 1.0)
label.translatesAutoresizingMaskIntoConstraints = false
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(sectionTitle)
sectionTitle.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 24).isActive = true
sectionTitle.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
backgroundColor = UIColor.init(red: 242/255, green: 242/255, blue: 244/255, alpha: 1.0)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(text: String) {
sectionTitle.text = text
super.init(frame: .zero)
}
}
如果我使用以下代码,则表示我的标题不可见
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0 {
return ProducutDetailsTableViewHeader(text: "PREVED")
}
return nil
}
但是这个代码一切都还可以
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0 {
let view = ProducutDetailsTableViewHeader()
view.sectionTitle.text = "Preved"
return view
}
return nil
}
看起来我对inits做错了。到底是什么?
答案 0 :(得分:4)
尝试更改init(text: String)
方法,看看是否有效:
convenience init(text: String) {
self.init(frame: .zero)
sectionTitle.text = text
}
当你调用super.init时,你正在调用UIViewController的默认init方法,而不是你的 init方法。通过调用self.init,您可以确保调用正确的方法。