故事板中可重复使用的笔尖

时间:2015-09-12 20:24:03

标签: ios swift xib

我正在寻找一种制作笔尖的方法,然后我可以在故事板中嵌入和重用,并且所有IBOutlets都已正确实例化。我能够使用this tutorial的修改版本来实现它。

让它发挥作用的步骤是:

  1. 创建自定义视图子类和相应的nib
  2. File's Owner设置为自定义视图子类
  3. 添加UIView作为笔尖视图的直接后代(这是我们的内容视图)
  4. 在类型为IBOutlet的名为contentView的视图类中创建UIView,并将笔尖中的内容视图内容添加到该商店
  5. awakeFromNib中执行以下操作:

    override func awakeFromNib() {
        super.awakeFromNib() //call super
        NSBundle.mainBundle().loadNibNamed("MyView", owner: self, options: nil)
        self.contentView.translatesAutoresizingMaskIntoConstraints = false
        self.addSubview(self.contentView)
    
        self.addEdgeConstraintWithAttribute(.Left, withSubview: self.contentView)
        self.addEdgeConstraintWithAttribute(.Top, withSubview: self.contentView)
        self.addEdgeConstraintWithAttribute(.Right, withSubview: self.contentView)
        self.addEdgeConstraintWithAttribute(.Bottom, withSubview: self.contentView)
    }
    
  6. 这个过程运作正常,但我不明白如何运作。是否有更好的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:2)

这一切都来自awakeFromNib NSNibAwaking协议。

  

"为每个对象调用-awakeFromNib方法   在加载nib文件时实例化..." - e.James

让我们说,你创建了一个名为MyView的类和笔尖并完成了上述所有步骤,现在当你在故事板中添加UIView并将其类设置为{{1}时并运行该应用程序。这里发生了什么。

  • 您的情节提要会加载所有视图,并为您调用MyView awakeFromNib
  • 您的MyView会触发加载名为awakeFromNib的笔尖。
  • 您从Nib实例化视图中获取内容视图,并将其添加到storyboard实例化视图并设置其约束。
  • 注意MyView方法,您发送loadNibNamed作为所有者,所以 当nib被取消归档并加载时,它会将所有self设置为 已发送IBOutlets,这就是您self工作的原因,即IBOutlet,因为contentView现在具有来自笔尖的视图。