【问题标题】:NSMenu - @selector(doSomething) not doing anything when I click on itNSMenu - @selector(doSomething) 当我点击它时没有做任何事情
【发布时间】:2016-02-26 05:59:43
【问题描述】:

提前感谢您的帮助。

问题:'@selector(doSomething)' 没有调用' - (void)doSomething:(id)sender' 方法

我试图让状态栏中的项目调用 doSomething 方法,但是当我单击它时似乎没有任何反应。

我做错了什么?

AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    sync_control *controlObject = [[sync_control alloc] init];
    [controlObject startSyncApp];
}

SyncControl.m

    NSStatusBar *syncStatusBar;
    NSStatusItem *syncStatusItem;

- (void) startSyncApp
{
    syncStatusBar = [NSStatusBar systemStatusBar];
    syncStatusItem = [syncStatusBar statusItemWithLength:NSSquareStatusItemLength];

    NSImage *statusItemImage = [NSImage imageNamed:@"1.png"];
    statusItemImage.template = YES;
    statusItemImage.size = NSMakeSize(18.0,18.0);

    [syncStatusItem setImage:statusItemImage];
    [syncStatusItem setHighlightMode:YES];

    [syncStatusItem setMenu:[self waitingState:Nil]]; 
}


- (NSMenu *)waitingState:(id)sender
{
    NSMenu *localMenu;

    //Create the NSMenu
    localMenu = [[NSMenu alloc] initWithTitle:@"Sync"];
    [localMenu setAutoenablesItems:NO];
    [localMenu insertItemWithTitle:@"Do something now..." action:@selector(doSomething:) keyEquivalent:@"" atIndex:1];

    return localMenu;
}


- (void)doSomething:(id)sender
{
    NSLog(@"It works!");
}

【问题讨论】:

  • 仔细查看您要添加到 NSMenuItem 的内容。
  • 感谢您的反馈。

标签: objective-c xcode macos cocoa appkit


【解决方案1】:

问题可能是菜单项有一个操作选择器,但没有目标。试试这个:

NSMenuItem *someItem = [localMenu insertItemWithTitle:@"Do something now..." action:@selector(doSomething:) keyEquivalent:@"" atIndex:0];
[someItem setTarget: self];

【讨论】:

  • 感谢您的反馈。
  • 在 StackOverflow 上,您可以通过对答案和 cmets 上下投票和/或将答案标记为“回答问题”来感谢人们。
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 2012-02-21
  • 2011-09-09
  • 2023-03-12
  • 2019-08-11
  • 1970-01-01
相关资源
最近更新 更多