狀態欄編程(Status Bar Programming Topics)

Status Bar Programming Topics

簡介

狀態欄展現了一組與用戶交互或給用戶反饋的狀態項,比如反映應用狀態的菜單或者圖片。 系統級的狀態欄在菜單欄最右邊。 這是目前唯一可用的狀態欄。

慎用狀態欄!只有當其他方式(Dock菜單,偏好設置面板或者狀態窗口)仍然不能滿足需求時,才能使用狀態欄。因爲菜單欄中顯示狀態項的地方很有限。狀態項並不一定能一直顯示。 因此,不要依賴狀態項,應該總是讓用戶可以設置隱藏應用的狀態項,來減少菜單欄的空間。

關於何時使用狀態欄,參考 Aqua Human Interface Guidelines.

狀態欄的作用,見“關於狀態欄”

示例代碼,以及如何創建狀態項,見”創建狀態項“


關於狀態欄

狀態欄展現了一組與用戶交互或給用戶反饋的狀態項。狀態項可以是文字,也可以是圖標。 狀態項可以展示菜單,或者點擊的時候觸發一個事件,也可以完全自定義。

目前,只有一個狀態欄可用,也就是系統狀態欄。 如圖1,狀態欄在整個系統的菜單欄上。狀態項在菜單欄的右邊,菜單欄時鐘和菜單附加項(比如桌面和聲音菜單)的左邊。即使應用當前沒有在前臺運行,狀態項也一直停留在菜單欄上。

圖1 系統狀態欄


每一個新的狀態項,都添加在已有狀態項左邊。 當刪除一個狀態項時,左邊的項右移一格佔據被刪除項原來的位置。如果狀態欄超過了當前應用的菜單欄,那麼,最左邊的狀態項將被隱藏,以騰出空間顯示完整的菜單。


創建狀態項

獲取狀態欄時,使用類方法 systemStatusBar。 不要自己生成狀態欄的實例。

創建狀態項並分配空間,使用 statusItemWithLength:。參數爲狀態項的寬度,單位像素。

常量 NSSquareStatusItemLength 和 NSVariableStatusItemLength 分別用來設置狀態項的寬度等於狀態欄的厚度(厚度通過thickness方法獲取),和基於狀態項內容的變量。前者用來顯示圖標,後者用來顯示靜態文本。

由於系統狀態欄是所有應用公用的,因此它本身不能持有每一個應用的狀態項對象的引用。相反的,每一個應用都應該自己持有自己的狀態項,那麼配置變化時,每一個狀態項都能和狀態欄交互。當被釋放時,狀態項將自己從狀態欄移除。 根據常規Cocoa 內存管理規則,必須使用 statusItemWithLength:來持有對象。

一旦創建了狀態項對象,就可以設置標題、菜單、監聽事件、提示等等。

下面的例子中,在菜單欄中添加了一個狀態項,並分配了菜單。

- (void)activateStatusMenu
{
    NSStatusBar *bar = [NSStatusBar systemStatusBar];
 
    theItem = [bar statusItemWithLength:NSVariableStatusItemLength];
    [theItem retain];
 
    [theItem setTitle: NSLocalizedString(@"Tablet",@"")];
    [theItem setHighlightMode:YES];
    [theItem setMenu:theMenu];
}

上述例子,假設已經有一個實例變量theMenu,表示一個NSMenu對象,可能是從nib文件中關聯而來的。同時還有另一個實例變量theItem,表示持有的狀態項。運行上述代碼時,菜單欄右側會添加一個名叫”Tablet“(或者響應的本地化字符串)的菜單。只要該應用在運行,這個菜單就一直可用,狀態項也一直存在。



發佈了34 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章