macOS UI Dock圖示上顯示訊息標記

Dock圖示上顯示訊息標記

打開Mail或訊息APP都會看到右上角會顯示目前信箱數或是訊息數,就像上面圖片一樣該怎麼做呢?

右上角顯示的稱為訊息標記(Badge),當我們寫好程式並執行時,首先程式會提供NSApplication一些必要的方法,之後Mac上的Dock就會跟程式取得物件NSDockTile,然而NSDockTile物件中必需要提供圖示資料、訊息標記資料,預設圖示資料是從方法applicationIconImage取得,也就是APP的icon圖示,但訊息標記預設則是空值,因為記息標記是空值,所以就不會在Dock上顯示,除非後續自行指定後才會顯示。要取得執行程式的NSDockTile物件必需透過NSApp物件的方法dockTile取得:

//-----------start-----------
    NSDockTile *dockTile = [NSApp dockTile];
//------------end------------

Dock上顯示訊息標記叫Badge,使用setBadgeLabel方法來改變內容:

//-----------start-----------
    NSDockTile *dockTile = [NSApp dockTile];
    [dockTile setBadgeLabel:@"S10"];
//------------end------------

當然改變完之後必需要讓Dock能夠重新顯示新的訊息:

//-----------start-----------
    NSDockTile *dockTile = [NSApp dockTile];
    [dockTile setBadgeLabel:@"S10"];
    [dockTile display];//一定要呼叫此方法才能更新Dock上的顯示
//------------end------------

只需要三行指定就能讓Dock上能顯示訊息標記(Badge),如果你想要恢復正常時,只需要將BadgeLabel填空值就完成:

//-----------start-----------
    NSDockTile *dockTile = [NSApp dockTile];
    [dockTile setBadgeLabel:@""];//不填內容就能恢復
    [dockTile display];//一定要呼叫此方法才能更新Dock上的顯示
//------------end------------

以上將結果寫成一個範例程式後並做成動畫表達,範例程式功能使用2個按鍵來顯示訊息標記內容為S10,另一個則取消它:

程式.m檔內容參考:

//-----------start-----------
#import "AppDelegate.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}

- (IBAction)showBadge:(id)sender {
    NSDockTile *dockTile = [NSApp dockTile];
    [dockTile setBadgeLabel:@"S10"];
    [dockTile display];

}
- (IBAction)showBadgeToNormal:(id)sender {
    NSDockTile *dockTile = [NSApp dockTile];
    [dockTile setBadgeLabel:@""];
    [dockTile display];
}
@end
//------------end------------