これは、hollow7が参照した議論に基づいた完全な実例です。
self.statusItem.title = @"Message that will be truncated as necessary.";
while (self.statusItem.title.length > 0) {
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenAboveWindow, (CGWindowID)self.statusItemWindow.windowNumber);
if (CFArrayGetCount(windowList) > 1) {
CFRelease(windowList);
self.statusItem.title = [self.statusItem.title substringToIndex:self.statusItem.title.length - 1];
} else {
CFRelease(windowList);
break;
}
}
残っているトリッキーな部分は、NSStatusItemウィンドウを取得することです。これまでのところ、それを取得するための2つの方法を見つけました。
1-と呼ばれるプライベートメソッドがあり_window
ます。あなたはそれをこのように利用することができます:
self.statusItemWindow = [self.statusItem performSelector:@selector(_window)];
2-これはもう少し複雑ですが、MacAppStoreでのプライベートメソッドの使用に関するAppleの静的分析に合格する可能性が高いと思います。
次のように、のターゲットとアクションNSStatusItem
を制御するメソッドに設定します。
self.statusItem.target = self;
self.statusItem.action = @selector(itemClicked:);
次に、呼び出されたメソッドのウィンドウにアクセスします。
- (void)itemClicked:(id)sender {
self.statusItemWindow = [[NSApp currentEvent] window];
}