UIView与自定义init无法正常工作

时间:2017-05-07 13:30:23

标签: ios swift

我有一个观点,我在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做错了。到底是什么?

1 个答案:

答案 0 :(得分:4)

尝试更改init(text: String)方法,看看是否有效:

convenience init(text: String) {
    self.init(frame: .zero)
    sectionTitle.text = text
}

当你调用super.init时,你正在调用UIViewController的默认init方法,而不是你的 init方法。通过调用self.init,您可以确保调用正确的方法。