当一个元素从Storyboard拖到ViewController时,它在哪里以编程方式链接?

时间:2016-11-05 00:56:09

标签: xcode storyboard

据我了解,每个元素(如按钮或标签)都是从Storyboard链接到ViewController。这是通过拖动在XCode中以图形方式完成的。在XCode环境中声明此配对的代码在哪里?

2 个答案:

答案 0 :(得分:2)

没有代码表明了这一点。实际上,根本没有实际连接。这只是一种幻觉。

执行此操作时,有两个单独的内容已配置:

  • nib (故事板)中,配置了插座。它只是一个名字,一个字符串

  • 在代码中,有一个名称相同的属性。

它们之间的连接发生,如果它将要发生,当应用程序实际运行时,在某些时候,nib是已加载。此时,nib具有所有者,并且键值编码用于查找与该插件同名的所有者的属性。如果它在那里,则从nib实例化的对象被指定为该属性的值,从而建立连接。

所以你看,Xcode中没有真正的连接。在应用程序实际运行时,在nib加载时,有两个单独的需要尝试连接。这是一个脆弱而冒险的业务。这就是为什么,如果没有这样的属性,那么你的应用就会崩溃。

答案 1 :(得分:1)

基本上@IBOutlet不是Swift的一部分,这就是让Xcode弄清楚控制器内的outlet属性链接到Storyboard上的某些UIView(或子类,如UILabel)的原因。

此外,如果您右键单击故事板,并打开为>源代码,您应该看到很多生成的UI / XML代码。如果您的标签名为myLabel,您应该看到如下内容:

<connections>
    <outlet property="myLabel" destination="zLp-2i-ru4" id="Zda-UD-1h6"/>
</connections>

在其中一个场景节点中。