【问题标题】:Access Property from Another Class, separate XIB从另一个类访问属性,单独的 XIB
【发布时间】:2020-09-09 11:24:52
【问题描述】:

这可能是一个简单的问题,但请耐心等待,我很新,只是在尝试。 MacOS,不是 iOS,假设我有两个单独的 XIB 文件(MainMenu.xib 和 AnotherWindow.xib)。我正在使用 MainMenu.xib 中的文件菜单打开 AnotherWindow.xib,并在打开时禁用文件菜单:

- (IBAction)OpenAnotherWindow:(id)sender {
           if (!anotherWindow) {
               anotherWindow = [[AnotherWindow alloc] initWithWindowNibName:@"AnotherWindow"];

       }
           [anotherWindow showWindow:self];
    [self.MenuItem setEnabled:NO];

在 AnotherWindow.xib 中,我想在文件菜单关闭时重新启用:

- (void)windowWillClose:(NSNotification *)aNotification {
    [self.MenuItem setEnabled:YES];
}

我遇到的问题是我无法从第二类访问 MenuItem,因为它是 MainMenu.xib 的一部分 - 所以我只是得到错误:在具有 [self.MenuItem setEnabled 的类型的对象上找不到属性:是的];在AnotherWindow.xib中

所以我想我的问题是:如何访问像

这样的属性
@property (weak) IBOutlet NSMenuItem *MenuItem;

这是我的 MainMenu.xib 中的 AnotherWindow.xib。

【问题讨论】:

    标签: objective-c xcode macos cocoa


    【解决方案1】:

    不要手动启用和禁用菜单项,而是覆盖包含OpenAnotherWindow IBAction 的类中的函数validateUserInterfaceItem

    validateUserInterfaceItem 函数将NSValidatedUserInterfaceItem 类型的项目作为参数。检查项目的操作是否为OpenAnotherWindow。如果是,请检查anotherWindow 是否打开。如果它已打开,则返回 false,这将禁用菜单项。如果窗口未打开,则返回 true,这将启用菜单项。我的 Objective-C 生锈了,所以我没有代码清单给你。

    【讨论】:

    • 这绝对是正确答案,应该标记为接受。一个澄清是validateUserInterfaceItem 来自NSUserInterfaceValidations 协议,并且在任何可能成为UI 对象目标的类中采用该协议将使目标对象有机会验证该项目。通常,您会在视图、视图控制器、文档等响应者链对象中实现-validateUserInterfaceItem。OP 专门询问菜单项,并且菜单项通常针对第一响应者,因此响应者链在那里特别有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2020-09-17
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多