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 {}