【问题标题】:External Object in storyboards故事板中的外部对象
【发布时间】:2015-03-21 19:34:37
【问题描述】:

Apple 已经有一段时间为我们提供了故事板,我从一开始就在关注它的演变,它有一些优点和缺点,但如果你将它与老式的“xib”进行比较,可以肯定这是一个“未来” " 文件...

我在这里知道的是一种叫做“外部对象”的东西。使用标准“xib”时,我们总是能够从 IB 对象库(右侧窗格)中拖放两种特殊类型的对象

“文件的所有者”是这个“外部对象”的一个例子。

我们能够将另一个 ExternalObject 拖放到我们的 xib 文件中,并通过使用此 UINib API 实例化此类 ViewController 将其连接到某个外部对象:

- (NSArray *)instantiateWithOwner:(id)ownerOrNil options:(NSDictionary *)optionsOrNil;

...是的,有可能,文档:

如果 nib 文件包含除文件之外的任何代理对象 Owner 代理对象,可以指定运行时替换对象 对于那些使用选项字典的代理。在那本词典里, 添加 UINibExternalObjects 键并将其值设置为字典 包含任何代理对象的名称(键)和真实的 使用的对象。代理对象的名称是字符串 您在 Interface Builder 检查器的 Name 字段中分配给它 窗口。

现在谈到情节提要 - 外部对象在对象检查器中不可用。这是有道理的,因为我还没有找到任何 API 可以让我们将外部对象注入到从情节提要创建的视图控制器中。我们只有这个:

- (id)instantiateInitialViewController;

- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;

所以没有办法传递我们的“选项”。

不过……

外部对象在情节提要中不可用,直到...您制作了一个 Swift 项目(也许还有另一个因素在我的情节提要中启用外部对象,我不确定)。

因此,可以设置故事板允许我们将外部对象拖放到故事板中。但是我们怎样才能利用这一点呢?如何从情节提要中加载视图控制器并连接这些代理对象?

【问题讨论】:

    标签: ios objective-c storyboard xib nsbundle


    【解决方案1】:

    您可以在视图控制器场景中拖放一个 NSObject,并在检查器中为其提供正确的类。

    可以按预期接线

    我为this question/answerpublished it at GitHub 创建了一个示例项目。

    【讨论】:

    • 很抱歉,但这不是我问题的答案,我知道我可以使用“NSObject”是情节提要 - 它在 IB 检查器中称为对象。我在 IB 检查员中询问一个名为“外部对象”的东西。最好的!
    • 这可以代表任何东西。
    • 是的,它可以是任何对象,但该对象将在 xib 取消归档期间创建。另一方面,外部对象不是在此过程中创建的,它是指向已经存在的其他对象的链接。
    • 使其成为 NSProxy 对象并在需要时加载它。
    • 好主意,我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多