Вот полный рабочий пример, основанный на обсуждении, на которое ссылается 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.До сих пор я нашел два метода для его получения.
1 - есть частный метод с именем _window
.Вы можете использовать его следующим образом:
self.statusItemWindow = [self.statusItem performSelector:@selector(_window)];
2 - это немного сложнее, но я думаю, что с большей вероятностью пройдет статический анализ Apple для частного использования в Mac App Store:
Установите цель и действие NSStatusItem
для метода, которым вы управляете, например:
self.statusItem.target = self;
self.statusItem.action = @selector(itemClicked:);
Затем откройте окно в вызванном методе:
- (void)itemClicked:(id)sender {
self.statusItemWindow = [[NSApp currentEvent] window];
}