【问题标题】:hide NSMenu from a NSButton inside a custom view从自定义视图中的 NSButton 隐藏 NSMenu
【发布时间】:2013-06-15 14:45:23
【问题描述】:

我有一个带有 Xcode 4.6.2 的简单 cocoa coredata 状态栏应用程序。 在我的AppController.h 我有

@interface AppController : NSObject
@property NSStatusItem *statusItem;
@property IBOutlet NSMenu *statusMenu;

在我的AppController.m

@synthesize statusItem = statusItem;
@synthesize statusMenu = statusMenu;
-(void)awakeFromNib{
    statusItem = [[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength];
    statusItem.menu = statusMenu;
}

那么,在我的AppDelegate.m 中有一个函数:

#import "AppController.h"
-(IBAction)someAction:(id)sender{
    //code to do something
    AppController *x = [[AppController alloc]init];
    [x.statusMenu cancelTracking];
}

我想通过一个按钮关闭菜单,该按钮在 NSMenuItem 的自定义视图中执行操作(从 Connection Inspector->Outlets->view ctrl+拖动到按钮)。我无法为 NSButton 选择 2 个不同的已发送操作,因此我必须从 AppDelegate 类中的 IBAction someAction 关闭 AppController 类中声明的菜单。怎么做?我发布的代码不起作用。 提前致谢

【问题讨论】:

    标签: xcode cocoa custom-view nsmenuitem nsmenu


    【解决方案1】:

    您的代码可能不起作用,因为您正在初始化第二个 AppController。

    您需要在 AppDelegate 中引用您的原始 AppController。这可以通过使用可可绑定来实现。在您的 .XIB 文件中,从您的对象库中拖动一个新的蓝色对象,使用检查器将其设置为 AppController 类,然后按住 Control 并拖动到您的 AppDelegate 标头以创建绑定。使用该引用并删除 AppController *x = [[AppController alloc] init];

    【讨论】:

    • 谢谢!但是还有另一件事要做,我必须在 AppDelegate.h 中插入“#import“AppController.h”,否则 IBOutlet 会显示“未知类型名称”。在此之后,在 AppDelegate.m "[outletName.statusMenu cancelTracking];"一切顺利!也许你可以编辑你的答案
    • 我也可以删除AppDelegate.m中的“#import "AppController.h"
    【解决方案2】:

    不妨试试这个:

    [[NSStatusBar systemStatusBar] removeStatusItem:[GSAppDelegate alloc].statusMenu];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多