IBOutlet为零,但已连接到情节提要中,Swift

使用Swift 1.1和Xcode 6.2。

我有一个UIStoryboard,其中包含一个单一的自定义UIViewController子类。在它上面,我有一个从该控制器到情节提要上的子类@IBOutlet的类型连接。对于该视图的子视图,我也有类似的渠道。见图A。UIViewUIView

但是在运行时,这些属性为零(图B)。即使我确信我已经连接了Interface Builder中的插座。

想法

  • 是否有可能因为我正在使用子类的子类而使初始化混乱?我没有重写任何初始化程序

  • awakeFromNib: 由于某种原因没有被打电话

  • 也许它没有连接到子视图上的子视图

我尝试过的事情:

  • @IBOutlet完全匹配和情节提要的项目类型(而不是UIView

  • 删除属性和出口并重新添加它们

*中的模糊代码Figure A为:


@IBOutlet private var annotationOptionsView: UIView!

@IBOutlet private var arrivingLeavingSwitch: UISegmentedControl!

谢谢。


幕布斯7119047
浏览 593回答 3
3回答

HUX布斯

通常发生这种情况是因为您的视图控制器尚未加载其视图层次结构。视图控制器仅在某人向其发送view消息时才加载其视图层次结构。当需要将视图层次结构实际显示在屏幕上时,系统会执行此操作,这会在诸如此类的事情发生prepareForSegue:sender:并viewWillAppear:返回之后发生。由于您的VC尚未加载其视图层次结构,因此出口仍然为零。您可以说来强制VC加载其视图层次结构_ = self.view。

料青山看我应如是

您是从情节提要或NIB实例化视图控制器,还是直接通过初始化程序将其实例化?如果直接用初始化程序实例化您的类,则插座将不会连接。Interface Builder创建类的自定义实例,并将这些实例编码为NIB和Storyboard,以进行重复解码,但它并未定义类本身。如果这是您的问题,则只需更改创建控制器的代码,即可使用UIStoryboard或UINib上的方法。
打开App,查看更多内容
随时随地看视频慕课网APP