将信息放在Mac菜单栏项目中

时间:2010-08-17 16:04:13

标签: objective-c cocoa macos

我希望这不是太笼统。我是初学者,我正在尝试学习如何在Objective-C中为Mac制作状态栏(右侧菜单)。

我已经设法创建基本大纲,但我不知道用于特定操作的方法是什么:我希望当出现下拉菜单时,它会调用一个将返回字符串的方法待显示。

换句话说,如何让菜单调用方法并显示其返回值。

请可可。

谢谢!

1 个答案:

答案 0 :(得分:2)

您创建了一个IBAction方法。 Interface Builder中类的控制器将看到标记为此类的任何方法。因此,如果您将这样的方法放在app控制器类中,那么在界面构建器中,您将在app控制器对象中看到该方法。现在您可以在IB中看到它,通过控制 - 从菜单项拖动到控制器,将该方法连接到菜单项。 ibaction方法有一个名为“sender”的参数,它是消息的发送者。因此,如果将方法挂钩到菜单项,则发送方将是NSMenuItem,因为这是调用方法的对象。并且NSMenuItem响应“setTitle:”方法,您可以使用该方法更改标题。所以这样的事情会起作用......

在“.h”文件中

-(IBAction)displayMenuItemtitle:(id)sender;

在“.m”文件中

-(IBAction)displayMenuItemtitle:(id)sender {
NSString* newTitle = @"my new title";
[sender setTitle:newTitle];
}

修改 重新阅读您的问题后,您可能希望NSMenu对象在其即将打开的菜单中显示新标题。 NSMenu有一个委托方法menuWillOpen:。因此,将您的app控制器设置为NSMenu的代表。然后在你的appcontroller类中使用这个......

- (void)menuWillOpen:(NSMenu *)menu {
NSArray* menuItems = [menu itemArray];
NSMenuItem* theMenuItem = [menuItems objectAtIndex:0];
NSString* newTitle = @"my new title";
[theMenuItem setTitle:newtitle];
}