如何从其他类设置NSStatusBar标题?

时间:2011-02-06 08:46:41

标签: objective-c cocoa macos

在我的一个课程中,我设置了我的NSStatusBar,如:

        statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setMenu:statusMenu];

是否有可能以某种方式调用类似的东西:

[statusItem setTitle:@"Waiting for data..."];

来自另一个班级?我想更改标题,因为用户已将信息输入到由不同类处理的首选项窗口中。

我尝试创建一个类函数:

+(void)ChangeTitel 

我从首选项类调用它,它似乎能够调用它,但不知何故不能访问statusItem对象。

有什么想法吗? :)

1 个答案:

答案 0 :(得分:1)

如果要从其他类更改标题,则其他类需要引用该状态项。

所以你需要做的是编写一个方法来返回这个状态项的指针,(它的实例变量是对吗?)然后调用该方法,以获取另一个类中的NSStatusItem对象。

从你的问题来看,我认为你是OOP编码的新手。类是一组代码.. sorta,如果你[[类alloc] init]你为类分配一些内存,并在其中创建该类的新对象。一个新的实例。 如果你调用以 - 开头的东西 - 那么你正在调用一个实例方法,这需要你有一个实例。如果你用+调用某些东西,你正在调用一个没有实例的CLASS方法,所以无法访问你状态项的实例变量。

- (NSStatusItem *)statusItem
{ return statusItem; }

不要忘记在头文件中声明此方法,否则您将收到编译器警告。

应该在管理状态项的类中。 然后在您要使用状态项的类中:

#import "ManagerClass.h" // on top, so we have the method declared

然后:

ManagerClass *someInstanceToIt = [[ManagerClass alloc] init];
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];

如果管理器类的实例是接口构建器插座,或者之前已经创建过,那么你不应该使用alloc] init]

执行第一行

如果您需要更多帮助,请发表评论。