
-(ID)init{ NSArray *subvIEwArray = [[NSBundle mainBundle] loadNibnamed:@"myXib" owner:self options:nil]; return [subvIEwArray objectAtIndex:0];} Swift中的等效代码是什么?
Orignal解决方案>我创建了一个XIB和一个名为SomeVIEw的类(使用相同的名称
方便和可读性)。我基于UIVIEw。
>在XIB中,我将“文件所有者”类更改为SomeVIEw(在身份检查器中)。
>我在SomeVIEw.swift中创建了一个UIVIEw插件,将其链接到XIB文件中的顶级视图(为了方便起见称为“视图”)。然后我根据需要将其他插座添加到XIB文件中的其他控件。
>在SomeVIEw.swift,我加载了XIB里面的“init与代码”初始值设定器。没有必要为“自我”指定任何东西。加载XIB后,所有插座都将连接,包括顶层视图。唯一缺少的是将顶视图添加到视图层次结构:
。
class SomeVIEw: UIVIEw { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) NSBundle.mainBundle().loadNibnamed("SomeVIEw",owner: self,options: nil) self.addSubvIEw(self.vIEw); // adding the top level vIEw to the vIEw hIErarchy } ...} 注意,这样我得到一个类从nib加载自己。我可以使用SomeVIEw作为一个类,当UIVIEw可以在项目中使用(在界面构建器或编程)。
更新 – 使用Swift 3语法
在以下扩展中加载xib将被写为一个实例方法,然后可以像上面那样使用初始化器:
extension UIVIEw { @discardableResult // 1 func fromNib<T : UIVIEw>() -> T? { // 2 guard let vIEw = Bundle.main.loadNibnamed(String(describing: type(of: self)),options: nil)?[0] as? T else { // 3 // xib not loaded,or it's top vIEw is of the wrong type return nil } self.addSubvIEw(vIEw) // 4 vIEw.translatesautoresizingMaskIntoConstraints = false // 5 vIEw.layoutAttachAll(to: self) // 6 return vIEw // 7 }} >使用可废弃的返回值,因为当所有插座已经连接时,返回的视图对呼叫者几乎不感兴趣。
>这是一个返回类型为UIVIEw的可选对象的通用方法。如果无法加载视图,则返回nil。
>尝试加载与当前类实例同名的XIB文件。如果失败,返回nil。
>将顶级视图添加到视图层次结构。
>此行假设我们使用约束来布局视图。
>此方法添加顶部,底部,前导&尾随约束 – 将视图附加到“self”的所有方面(不包括此方法的代码)。
>返回顶级视图
调用方法可能如下所示:
final class SomeVIEw: UIVIEw { // 1. required init(coder aDecoder: NSCoder) { // 2 - storyboard initializer super.init(coder: aDecoder) fromNib() // 5. } init() { // 3 - programmatic initializer super.init(frame: CGRect()) // 4. fromNib() // 6. } // other methods ...} > SomeClass是一个UIVIEw子类,它从SomeClass.xib文件加载其内容。 “final”关键字是可选的。
>当在故事板中使用视图时的初始化器(记住使用SomeClass作为你的故事板视图的自定义类)。
>当以编程方式创建视图时(即:“let myVIEw = SomeVIEw()”)的初始化器。
>使用全零框架,因为此视图使用自动布局布局。
请注意,不是单独创建一个“init(frame:CGRect){..}”方法,因为自动布局专门在我们的项目中使用。
>& 6.使用扩展名加载xib文件。
信用:在这个解决方案中使用通用扩展是受到罗伯特的答案的启发下面。
总结以上是内存溢出为你收集整理的在Swift中从nib加载UIView全部内容,希望文章能够帮你解决在Swift中从nib加载UIView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)