我有一个使用Xcode 4.6.2的简单可可coredata statusbar应用程序。
在我的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 + drag到该按钮)。我无法为NSButton选择2个不同的发送动作,因此必须从AppDelegate类中的IBAction someAction关闭AppController类中声明的菜单。怎么做?我发布的代码无法正常工作。
提前致谢

最佳答案

您的代码可能无法正常工作,因为您正在初始化第二个AppController。

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

关于xcode - 在自定义 View 中从NSButton隐藏NSMenu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17124821/

10-12 21:28