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------------