簡體   English   中英

NSStatusItem不顯示圖像和標題

[英]NSStatusItem not showing image and title

我正在嘗試制作一個狀態欄項目,如右上方的電池或時間機器指示器。 我的代碼如下

- (void)activateStatusBarItem:(id)object{
NSStatusBar *systemBar = [NSStatusBar systemStatusBar];

NSStatusItem *theItem = [systemBar statusItemWithLength:NSVariableStatusItemLength];

NSImage *statusBarIcon = [NSImage imageNamed:@"icon-sleep.png"];
statusBarIcon.size = CGSizeMake(NSSquareStatusItemLength, NSSquareStatusItemLength);

[theItem setImage:statusBarIcon];
[theItem setTitle:@"abc"];
[theItem setTarget:self];
[theItem setAction:@selector(showHUD:)];
}

應用啟動時調用此方法。 但是,我在菜單上看不到Item。 它曾經工作過一次,但沒有圖像的相同代碼。

同樣,當我查看Apple的方法時:-setTitle:-setImage:-setTarget:-setAction:所有人都說它們同時可用且已貶值,請看下面的圖像。 還有其他辦法,我可以做到。 我希望單擊該項目時可能會出現一個窗口/面板,該窗口/面板可能已附加到欄中。

在此處輸入圖片說明

您正在將圖像尺寸設置為無意義的值。 NSSquareStatusItemLength為-2。 這是一個前哨值,而不是實際長度。

您將需要使用systemBar.thickness來確定用於正方形狀態項的實際大小。

關於不推薦使用的方法,在10.10中, NSStatusItem具有新的button屬性。 應該使用它而不是現在不贊成使用的view屬性(您沒有使用過)。 現在,所有其他不推薦使用的屬性僅包含調用按鈕上相應方法的方法。 使用這些掩護方法是安全的,它們應該仍然有效。

您沒有對狀態項保持強烈引用。 它只是存儲在局部變量中。 如果使用的是ARC,則表示它在-activateStatusBarItem:方法的末尾釋放,該方法將其從狀態欄中刪除。 因此,您正在快速創建並刪除它。 您應該在實例變量中保持強引用。 +[NSStatusBar statusItemWithLength:]記錄了保持強烈引用的要求:

接收方不會保留對狀態項的引用,因此您需要保留它。 否則,在重新分配對象后,該對象將從狀態欄中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM