我有一個視圖,我用作tableView中的標題。視圖非常簡單,它只有內部標籤。如果我在其中定義一個帶有字符串賦值的自定義init,則不起作用。UIView與自定義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做錯了什麼。究竟是什麼?
因此'self.init'調用這一行'override init(frame:CGRect)'...最終調用'super.init'的權利? – Honey
是的,正確的,super.init調用父類,自我調用你所指的那個。 – Scriptable