我有一个简单的可可coredata状态栏应用程序与Xcode 4.6.2。
在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类中声明的菜单。怎么做?我发布的代码不起作用。 提前致谢
答案 0 :(得分:0)
也许试试这个:
[[NSStatusBar systemStatusBar] removeStatusItem:[GSAppDelegate alloc].statusMenu];
答案 1 :(得分:0)
您的代码可能无法正常工作,因为您正在初始化第二个AppController。
您需要在AppDelegate中引用原始的AppController。这可以通过使用可可绑定来实现。在.XIB文件中,从对象库中拖动一个新的蓝色Object,使用检查器将其设置为AppController类,然后按住Ctrl键拖动到AppDelegate头中以创建绑定。使用该引用并删除AppController *x = [[AppController alloc] init];
。