【问题标题】:Load Xib Files with NSView使用 NSView 加载 Xib 文件
【发布时间】:2011-06-27 10:31:46
【问题描述】:

我在 MainMenu.xib 中有一个自定义视图,其中包含 2 个子视图。这些子视图应该从一些具有单个 NSView 的 xib 文件中加载。 我怎样才能做到这一点? 包含每个 xib 的 IBOutlet 和 IBActions 的类应该从哪个类继承?对于每个 xib,我必须将文件所有者设置为包含出口/动作的类?

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    你可以使用:

    - (BOOL)loadNibNamed:(NSString *)nibName
                   owner:(id)owner
         topLevelObjects:(NSArray * _Nonnull *)topLevelObjects
    

    加载你的xib文件,topLevelObjects参数是一个通过引用传递的数组,调用函数后它将包含你的xib中的对象数组,你感兴趣的是一个NSView类型的对象,你可以添加到任何地方的视图

    【讨论】:

      【解决方案2】:

      您的自定义视图或主菜单的头文件应该#include 您提到的 2 个子视图,并且您应该将它们列为 IBOutlet 成员和 IBOutlet 属性。 (别忘了合成!)

      在您的 xib 文件中,您应该能够拖入 2 个 NSView,然后将它们的类设置为您的 2 个子类,然后通过从“文件所有者”拖动到“对象”列表中的对象来链接它们。

      【讨论】:

      • 也许我没有解释清楚...我想从 MainMenu.xib(由 xcode 创建)中的 xib 文件加载 2 个 NSView。这个 mainMenu.xib 包含一个 NSView,我想在其中加载 2 个前面提到的 xib。我正在为 mac 开发
      • 我也想知道将带有 Outlets/Actions 的类链接到 xib 文件的最佳/正确方法(并在 IB 中查看它们)。我应该在文件所有者中设置我的自定义类还是拖动一个 NSObject(来自 IB 的对象库)?
      • 您的第一条评论:是的,我写的是 UIView 而不是 NSView……但它们基本相同,我写的应该仍然有效。第二条评论:由于您的子类继承自 NSView,如果您将 NSView 对象拖到 Interface Builder 中,然后将它们的类设置为子类的类(在身份检查器选项卡上),那么它们应该可以正常工作。当然,您仍然需要在主菜单的 loadView:(或类似)方法中初始化它们。
      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2017-12-09
      • 2017-01-08
      • 2012-06-17
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多