(Swift下)ios8Controller关联xib

ios8.x下要让Controller能与xib关联,关键是init(nibNameOrNil, bundleOrNil)方法。既然子类没有自动继承,我们就需要添加相关代码。(ios9及后续版本会自动继承方法找到对应的xib不需要重写),代码如下:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    let classString = String(self.dynamicType)
    if NSBundle.mainBundle().pathForResource(classString, ofType: "nib") == nil {
        print("n-xib")
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    } else {
        print("xib")
        super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil)
    }
}
    
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

  • 这里需要注意的是Bundle中xib是以nib为后缀存储的

StackOverflow下还给出了另一种解决办法

@objc(MyViewController) class MyViewController: UIViewController {}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容