繁体   English   中英

通过NSStatusItem的动作传递变量

[英]Passing a Variable through NSStatusItem's Action

我需要以编程方式添加多个状态菜单项。 我以前从未使用过NSStatusItem 以下是我所拥有的。

- (void)showStatus {
    for (NSInteger i4 = 0; i4 < alertArray4.count; i4++) {
        NSString *person = [[alertArray4 objectAtIndex:i4] objectForKey:key4e];
        NSString *imagepath = [[alertArray4 objectAtIndex:i4] objectForKey:key4f];
        NSString *nextDOB = [[alertArray4 objectAtIndex:i4] objectForKey:key4h];
        NSImage *personimage;
            if ([imagepath isEqualToString:@"0"]) {
                personimage = [self imageResize:[NSImage imageNamed:@"userNone"] newSize:NSMakeSize(16.0f,16.0f)];
            }
            else {
                personimage = [self imageResize:[NSImage imageNamed:@"userOne"] newSize:NSMakeSize(16.0f,16.0f)];
            }   
            NSString *menuTitle = [NSString stringWithFormat:@"%@ in %@ days",person,nextDOB];
            NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(statusItemClicked:) keyEquivalent:@""];
            [menuItem setImage:personimage];
        }
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    statusImage = [NSImage imageNamed:@"appIcon16"];
    [statusItem setImage:statusImage];
    [statusItem setMenu:statusMenu];
    [statusItem setTitle:alertCount.stringValue];
}

- (void)statusItemClicked:(NSString *)num {
    NSLog(@"Hello");
}

然后应用程序发布一个状态菜单,其中项目数= i4。 我不明白的是如何将变量传递给statusItemClicked,以便应用程序知道用户选择了哪个菜单项。 那么如何将变量( i4 )发送到statusItemClicked? 如果使用performSelectorInBackground ,则可以将变量附加到withObject 我想在这种情况下我不能这样做。

谢谢您的帮助。

我不知道它是如何工作的。 无论如何,我得出以下结论,这使我感到满意。

- (void)showStatus {
for (NSInteger i4 = 0; i4 < alertArray4.count; i4++) {
    ...
    NSString *num4 = [NSString stringWithFormat:@"%li",(long)i4];
    NSString *menuTitle = [NSString stringWithFormat:@"%@ in %@ days",person,nextDOB];
    NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(statusItemClicked:) keyEquivalent:@""];
    [menuItem setTarget:self];
    [menuItem setRepresentedObject:num4];
}
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
statusImage = [NSImage imageNamed:@"appIcon16"];
[statusItem setImage:statusImage];
[statusItem setMenu:statusMenu];
[statusItem setTitle:alertCount.stringValue];
}

- (void)statusItemClicked:(id)sender {
    id selectedItem = [sender representedObject];
    NSLog(@"%@",selectedItem);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM