菜单栏应用程序的自定义视图上的 mouseDown 问题

Posted

技术标签:

【中文标题】菜单栏应用程序的自定义视图上的 mouseDown 问题【英文标题】:mouseDown issue on custom view for a menubar app 【发布时间】:2012-07-24 14:23:32 【问题描述】:

我正在尝试编写拖放菜单栏应用程序。我使用自定义视图来访问删除的文件,这很好用。现在我想在单击此视图时打开默认菜单。我正在使用这个:

- (void)mouseDown:(NSEvent *)event 
   [statusItem popUpStatusItemMenu:statusMenu];

现在,mouseDown 工作正常(尝试使用 NSLog),但我仍然无法访问 statusItemstatusMenu

这是在 dropView.m 中,在 dropView.h 我得到了:

@interface dropView : NSView
    IBOutlet NSMenu *statusMenu;
    NSStatusItem *statusItem;

没有崩溃,没有日志……有什么想法吗?太棒了!

这比 .m 多了一点

- (void)awakeFromNib
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [statusItem setMenu:statusMenu];
    dropView *drop = [[dropView alloc] initWithFrame:NSMakeRect(0, 0, 24, 24)];
    [statusItem setView:drop];

【问题讨论】:

nope this give and error (property not found) 属性合成了吗? 2012-07-24 16:50:54.107 CopyDrop[13783:403] -[dropView statusMenu]:无法识别的选择器发送到实例 0x7fd6eb821760 【参考方案1】:

将此添加到您的 .h 文件中:

@property (strong, nonatomic) IBOutlet NSMenu *statusMenu;
@property (strong, nonatomic) NSStatusItem *statusItem;

将此添加到您的 .m 文件中:

@synthesize statusMenu, statusItem;

然后您将使用self.statusMenuself.statusItem 访问属性。

【讨论】:

2012-07-24 17:15:27.482 CopyDrop[14728:403] statusMenu: (null) statusItem: (null) 所以您正在访问它们,它们只是其中没有任何内容。我以为您正在将它们设置为某些东西... 你不应该使用 self.statusItem 和 self.statusMenu 吗? 我愿意:- (void)mouseDown:(NSEvent *)event [self.statusItem popUpStatusItemMenu:self.statusMenu]; 你不在你的awakeFromNib方法中

以上是关于菜单栏应用程序的自定义视图上的 mouseDown 问题的主要内容,如果未能解决你的问题,请参考以下文章

顶部栏的自定义下拉菜单[关闭]

带有collectionview的自定义菜单栏

带有上下文操作栏的自定义列表视图上的选定项目

Wordpress 导航栏中的自定义简码

Android中的自定义选项菜单栏问题

在导航栏上方添加视图