objective-c - 使用 NSString 作为 statusItem

标签 objective-c cocoa title menuitem

我想给我的 statusItem 一个标题,它应该改变它的内容。但如果我声明一个变量,菜单栏中就不会出现任何内容。 我的 .h 中的字符串:

@interface AppDelegate : NSObject <NSApplicationDelegate> { 

NSString *myString;

}

使用普通文本一切正常:@"text"但是当我这样做时.m:

-(void)awakeFromNib {
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];

[statusItem setTitle:myString];

[statusItem setMenu:statusMenu];
[statusItem setToolTip:@"my Tooltip"];
[statusItem setHighlightMode:YES];

}

当然我给了字符串一些内容。 提前致谢

最佳答案

问题在于 awakeFromNib 在初始化 myString 之前被调用。这就是为什么你的字符串文字可以工作,但用变量初始化却不能。

您可以尝试此操作,因为您在评论中提到要从类外设置标题。

(1) 将 ivar NSString *myString 更改为声明的属性:@property (nonatomic, Strong) NSString *myString;

(2) 为您的状态项创建一个 ivar:NSStatusItem *_statusItem; 并在 awakeFromNib 中初始化,就像您对此 ivar 所做的那样。

(3) 为您的 myString 创建自定义 setter :

- (void)setMyString:(NSString *)aString {
   _myString = aString;
   [_statusItem setTitle:aString];
}

如果您不需要 myString 来执行其他任何操作,则可以省略它,只需实现一个公共(public)方法来设置 NSStatusItem 标题。注意:要创建该状态项,您可能需要一些 UI 指标的占位符文本。不确定。

关于objective-c - 使用 NSString 作为 statusItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759090/

相关文章:

objective-c - -转换点 :toCoordinateFromView: method for Google Maps SDK for iOS

objective-c - 如何将文件拖放到 NSTextField 上?

objective-c - NSString 是整数吗?

php - 如何从 mysql 获取 img 标题部分的记录创建时间?

objective-c - 通过 FTP/SFTP 解析远程 $HOME 目录

ios - 如何在 iOS 应用程序中将 sqlite 数据与服务器同步?

ios - 在 sprite 上启用触摸(spritekit)

objective-c - 异步相当于 NSString 的 -initWithContentsOfURL :usedEncoding:error:

ubuntu - 如何在 Ubuntu 10 中更改 gnome 终端标题

Javascript/jQuery $.get(url) 标题解析不起作用