iOS 8中,所有的@IBOutlet视图都为nil。

3
我正在使用 Xcode8 并且在一个 OC 和 Swift 混编的项目上工作。
在我的项目中,我使用 swift 2.3 来创建新的 viewController。 我通过创建新文件并勾选 (Also crate XIB file) 来简单地创建 ViewController(这样它就可以自动绑定 VC)。 由于我过去的代码是 OC,所以我使用以下方式初始化我的 VC。
_theViewController = [[TheViewController alloc] init];

我想设置frame或者其他init属性与@IBOutlet视图一起使用。

在iOS 9及以上版本中,这全部都没问题(xib按预期加载,在viewDidLoad中断点后,可以看到那些Outlet实例不为nil)。但是在iOS 8下,无论在viewDidLoad,viewWillAppear,还是viewDidAppear中,那些IBOutlet视图始终为nil。当我注释掉所有初始化部分时,它似乎并没有像我想要的那样加载我的xib视图。

我尝试了一些我能找到的解决方案,但似乎都没有用(我确定xib已链接到VC(毕竟是由xcode创建和链接的)重写一些函数或以其他方式强制加载希望它的方法)

任何建议都将不胜感激 T_T

PS: 我没有使用故事板,只是使用这个xib技术进行快速和可视化开发。

1个回答

5

要使用nib文件初始化视图控制器对象,需通过编程方式创建您的视图控制器类,并使用init(nibName:bundle:)方法进行初始化。

当请求其视图时,视图控制器会从nib文件中加载它们。

API参考: https://developer.apple.com/reference/uikit/uiviewcontroller


所以,我一直都错了。当我在iOS 9+上运行[alloc init]时,自动执行init(nibName:bundle:)的事情吗?甚至我的实现在iOS 9+上工作,我应该在这种情况下用init(nibName:bundle:)替换所有的init吗? - d0ye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接