处理文件所有者对象的awakeFromNib
我知道有很多相关的问题,为什么awakeFromNib
在实例化一些视图时没有被调用。 从Nib唤醒某个视图的消息将被发送到视图本身,并且该消息不会传递给文件所有者。 我看到了为什么我的清醒不会从火中消失? 。
那么,如果你创build一个视图的实例,其文件的所有者本身在xib文件中会发生什么?
换句话说,你有你自己的自定义视图名为MyCustomView.swift和MyCustomView.xib。 在xib文件中,将文件的所有者设置为MyCustomView
。 所以,当你创buildMyCustomView
的实例时, awakeFromNib
会被调用吗? 在我的情况下, awakeFromNib
似乎并没有被调用。 然而,视图本身是真正实例化的。 所以,对于我来说, awakeFromNib
没有被调用是很奇怪的。
有谁能解释这件事吗?
仅供参考:我准备了BaseCustomView.swift
。 BaseCustomView
有两个init
。
override init(frame: CGRect) { super.init(frame: frame) commonInit() }
和
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonInit() }
而commonInit()
就是这样。
private func commonInit() { // load custom view's xib let bundle = Bundle(for: type(of: self)) let nib = UINib(nibName: self.className(), bundle: bundle) let view = nib.instantiate(withOwner: self, options: nil).first as! UIView addSubview(view) // make custom view's size the same size with itself view.translatesAutoresizingMaskIntoConstraints = false let bindings = ["view": view] addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options:NSLayoutFormatOptions(rawValue: 0), metrics:nil, views: bindings)) addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options:NSLayoutFormatOptions(rawValue: 0), metrics:nil, views: bindings)) }
而customView只是覆盖这个BaseCustomView
的类。 另外,customView的文件所有者是customView
本身。
更多编辑:自定义视图类是这样的。 而实际上awakeFromNib()
没有被调用。
final class MyCustomView: BaseCustomView { override func awakeFromNib() { // do something } }
笔尖中的“文件所有者”项目有点特别:它不是真正的对象,因为其他项目是这样的。 这是一个占位符 , 当nib被实例化时 ,这个占位符被一个预先存在的对象填充。
所以,文件的所有者并不是真的被其他对象所“唤醒”。 它是在笔尖未被存档之前创build的。 因此,接收awakeFromNib
并没有什么意义。