如何使 xib 子视图与 Swift 中的超级视图交互?

Posted

技术标签:

【中文标题】如何使 xib 子视图与 Swift 中的超级视图交互?【英文标题】:How to make a xib subview interact with superview in Swift? 【发布时间】:2014-11-16 00:18:56 【问题描述】:

我已经尝试了好几天了...

我想要一个带有一些按钮和其他东西的 nib 子视图。主视图将具有其他子视图,这些子视图会响应按下 nib 视图的按钮而发生变化。

我能做什么: 我已经使用 this approach 将 xib 子视图加载到超级视图中。

问题: 我无法让 xib 上的按钮与其他子视图交互(例如更改标签的文本)

我还没有弄清楚如何构建文件及其关系。

【问题讨论】:

【参考方案1】:

您可以在加载 nib 后使用 addTarget:action:forControlEvents: 为按钮添加操作方法;目标应该是 self(您添加此视图的控制器)。视图应该具有用于​​您需要与之交互的任何按钮或其他控件的 IBOutlets。如果您使用这种方法,您不应该对子视图类中的按钮进行任何操作。

另一种方法是在子视图类中设置按钮的操作方法,并让这些方法调用您在子视图类中创建的委托协议的方法。当您将子视图添加到您的视图时,您可以将控制器设置为子视图的委托,并实现您定义的任何协议方法。

【讨论】:

谢谢。生病尝试 addTarget 方法。我已经尝试过使用委托,但它没有用。它构建正确,但突然停止,控制台显示Could not load NIB in bundle: 'NSBundle </Users ... NibWithOutletsSet.app> (loaded)' with name 'ProfileView''

以上是关于如何使 xib 子视图与 Swift 中的超级视图交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局使超级视图适合最大的内在大小子视图

带有子视图的自动布局 NSCollectionView

Swift Xib 子视图未填充视图

如何在 Swift 中将内容包装为自定义视图

Swift:无法从 xib 访问子视图

如何使以编程方式生成的子视图符合超级视图(iOS)的边界?