XIB 中的强 IBOutlet 为零,具有多个视图

时间:2021-04-02 21:37:30

标签: swift xcode interface-builder xib loadnibnamed

调用 Bundle.main.loadNibNamed 加载一个 .xib 文件,该文件包含 (n) 个用多个 UIView 定义的 UI 变体实例化我的子类的 n 个实例。

然后我应用过滤器表达式以使用 .first(where: { $0.restorationIdentifier == <correct restoration ID> 选择正确的变体。

在这种情况下,我的过滤器表达式正确返回了 .xib 中的第 5 个 UIView,但我的自定义类中的 @IBOutlet 连接到已实例化的第一个 UIView立即被我认为是 ARC 弃用。

这导致我意外地获得了 nil IBOutlet。如何将 IBOutlet 连接到由 Bundle.main.loadNibBaned

返回的正确(在本例中为第 5 个)UIView

1 个答案:

答案 0 :(得分:1)

问题在于 loadNibNamed 正在实例化您的所有视图,而您只是选择保留其中一些视图。在此过程中,IB 插座按某种顺序分配,这很可能不会以您想要的对象最后分配给插座而告终。

我不认为 nib 文件可以让您仅实例化多个顶级对象中的一部分。您需要将各种视图拆分为多个笔尖(并且只加载您需要的一个),或者切换到使用 Storyboard,它确实允许您通过标识符实例化特定对象。

相关问题