测试测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布最后发布 | 2015年5月 |
由 Luka Mirosevic 维护。
一个简洁优雅的基于块的 API,用于用户通知,它使用 OS X 10.8+ 上 Lion 的原生 NSUserNotificationCenter,并针对旧版本回退到 Growl。
首先创建一个通知
GBSimpleNotification *myNotification = [GBSimpleNotification new];
myNotification.title = @"New Notification";
myNotification.body = @"This is the hello world of Goonbee's notification center";
然后发布它
[[GBNotificationCenter defaultCenter] postNotification:myNotification];
您还可以指定一个在点击通知时调用的处理程序,例如
GBSimpleNotification *upgradeNotification = [GBSimpleNotification new];
upgradeNotification.title = @"Pro Version";
upgradeNotification.body = @"Upgrade and unlock lots of awesome extra features. Click for more info!";
[[GBNotificationCenter defaultCenter] postNotification:upgradeNotification withHandler:^(id<GBNotification> notification) {
//opens the Mac App Store onto our Pro version
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"macappstore://itunes.apple.com/app/id%@?mt=12", @"1234567"]]];
}];
不要忘记导入头文件
#import <GBNotificationCenter/GBNotificationCenter.h>
您可以选择是否在点击通知后将其从 Lion 侧边栏中移除,例如
// This will prevent removing of notifications from the Lion notification center sidebar even after they've been clicked on. Defaults to YES.
[GBNotificationCenter defaultCenter].shouldRemoveDeliveredNotificationsFromNotificationCenter = NO;
您可以为通知设置显示策略,例如始终显示通知,即使应用程序处于活动状态
// Will show notification even if app is active. Defaults to GBNotificationCenterShowPolicyDefault, which only shows the notification if the app is not active.
[GBNotificationCenter defaultCenter].showPolicy = GBNotificationCenterShowPolicyAlwaysShow;
如果您不为您的通知设置处理程序,则可以注册一个代理并实现所有未处理的处理程序的处理程序。未处理的通知是在没有处理程序块发布时创建的,或者在您的应用程序未运行时点击通知时。例如
-(void)notificationController:(GBNotificationCenter *)notificationController didActivateWithUnhandledNotification:(id<GBNotification>)notification andNativeNotification:(id)nativeNotification {
// Do something when our notification is clicked, in this case, show the app's window and make the app active
[self.window makeKeyAndOrderFront:nil];
[NSApp activateIgnoringOtherApps:NO];
}
通知可以是任何符合 GBNotification
协议的对象。要创建您自己的实现,只需实现方法 titleForNotification
和 bodyForNotification
。这使得您可以使用任何具有相应存储和内部逻辑的对象作为通知。 GBSimpleNotification
是一个基本实现
#import "GBNotificationProtocol.h"
@interface GBSimpleNotification : NSObject <GBNotification>
@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSString *body;
@end
@implementation GBSimpleNotification
-(NSString *)titleForNotification {
return self.title;
}
-(NSString *)bodyForNotification {
return self.body;
}
@end
这种设计选择的原因是将库的底层显示和处理逻辑与格式化逻辑解耦,从而允许 GBNotificationCenter 提供一个非常通用的接口,同时让您的应用程序完全控制通知的显示方式。它让您“附加”通知到现有对象上,并为您提供了处理本地化、格式化、区域设置等的清晰方式。
您可以使用 [[GBNotificationCenter alloc] init]
创建多个 GBNotificationCenter 实例,每个都有它自己的代理、显示策略和 shouldRemoveDeliveredNotificationsFromNotificationCenter。
将其添加到项目的工作区中,添加 GBToolbox-OSX 依赖项,链接到您的二进制文件,添加“复制文件”步骤以将框架复制到捆绑包中。
它包含在 GBNotificationCenter 中,但您必须通过从 GBNotificationCenter 子项目中拖动框架到您的父项目(确保不选择“将项目复制到目标组文件夹”复选框)并将其添加到“复制文件”步骤中,将框架复制到您的应用程序捆绑包中。
版权 2013 Luka Mirosevic
Apache License 2.0 许可下授予许可(“许可”);除非根据适用的法律要求或书面同意,否则您不得使用本作品。您可以在 LICENSE 文件或以下地址获取许可副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用的法律规定或书面同意,否则根据许可分发软件基于“按原样”基础进行,不提供任何类型的保证或条件,无论是明示的还是暗示的。有关许可的具体语言规定权限和限制,请参见许可。