使用 loadNibNamed 加载视图时,如何在 UIView 上调用便利初始化程序?
Posted
技术标签:
【中文标题】使用 loadNibNamed 加载视图时,如何在 UIView 上调用便利初始化程序?【英文标题】:How to invoke a Convenience Initialiser on UIView when a view is loaded using loadNibNamed ? 【发布时间】:2017-03-18 08:30:53 【问题描述】:如何调用从 .xib 文件加载的视图的便捷初始化程序? 我的初始化程序定义如下:
class CustomView : UIView
var prop1:Int
var prop2:Int
convenience init(prop1:Int, prop2:Int, frame:CGRect)
self.prop1 = prop1
self.prop2 = prop2
super.init(frame:frame)
现在,如果我想像这样从关联的 .xib 文件中实例化 customView,如何执行此初始化程序
Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)?.first as! CustomView
谢谢。
【问题讨论】:
当你从 xib 加载然后你调用init?(coder aDecoder: NSCoder)
简答;你不能。在创建视图后设置属性或在 nib 中指定它们并按照 Adrian 的建议使用 init(coder)
【参考方案1】:
正如@Paulw 所说,你不能。从 xib/storyboard 加载的视图总是用init(coder:)
初始化。 UIView reference 声明:
nib 文件中的对象被重构,然后使用初始化 他们的 init(coder:) 方法,它修改了视图的属性 匹配存储在 nib 文件中的属性。
如果您想在 Interface Builder 中设置自定义视图,并且您有想要设置的自定义属性,您可以将这些属性设置为 IBInspectable
。
class CustomView: UIView
@IBInspectable var prop1: Int
@IBInspectable var prop2: Int
然后,当您在 Interface Builder 中选择该视图时,您将在 Attributes 检查器中看到它们(确保首先在 Identity 检查器中将 Class 设置为您的类的名称)。
NSHipster 在 IBInspectable here 上有一篇很棒的文章。
【讨论】:
以上是关于使用 loadNibNamed 加载视图时,如何在 UIView 上调用便利初始化程序?的主要内容,如果未能解决你的问题,请参考以下文章
使用方法[NSBundle loadNibNamed:xibName owner:[NSApplication sharedApplication]]加载Nib时如何传递参数?
通过 loadNibNamed() 从 xib 加载按钮从未调用
如何在 ios 中使用 UI NIB 而不是 loadNibNamed 来自定义 UI 表格视图单元格?