2012-08-05 42 views

Trả lời

148

Thông báo trong Mountain Lion được xử lý bởi hai lớp. NSUserNotificationNSUserNotificationCenter. NSUserNotification là thông báo thực tế của bạn, nó có tiêu đề, tin nhắn, v.v. có thể được đặt thông qua các thuộc tính. Để gửi thông báo mà bạn đã tạo, bạn có thể sử dụng phương thức deliverNotification: có sẵn trong NSUserNotificationCenter. Các tài liệu của Apple đã trình bày chi tiết thông tin về NSUserNotification & NSUserNotificationCenter nhưng mã cơ bản để gửi một thông báo như sau:

- (IBAction)showNotification:(id)sender{ 
    NSUserNotification *notification = [[NSUserNotification alloc] init]; 
    notification.title = @"Hello, World!"; 
    notification.informativeText = @"A notification"; 
    notification.soundName = NSUserNotificationDefaultSoundName; 

    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 
} 

Điều đó sẽ tạo ra một thông báo với một tiêu đề, một thông báo và sẽ phát âm thanh mặc định khi nó được hiển thị. Có rất nhiều điều bạn có thể làm với thông báo hơn là chỉ thông báo này (chẳng hạn như thông báo lập lịch) và tất cả đều chi tiết trong tài liệu mà tôi đã liên kết đến.

Một điểm nhỏ, thông báo sẽ chỉ được hiển thị khi ứng dụng của bạn là ứng dụng chính. Nếu bạn muốn thông báo của mình hiển thị bất kể ứng dụng của bạn có khóa hay không, bạn cần phải chỉ định đại biểu cho NSUserNotificationCenter và ghi đè phương thức ủy nhiệm userNotificationCenter:shouldPresentNotification: để trả về CÓ. Bạn có thể tìm thấy tài liệu cho NSUserNotificationCenterDelegatehere

Dưới đây là ví dụ về việc cung cấp ủy quyền cho NSUserNotificationCenter và sau đó buộc thông báo được hiển thị bất kể ứng dụng của bạn có phải là khóa hay không. Trong tập tin AppDelegate.m ứng dụng của bạn, chỉnh sửa nó như thế này:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; 
} 

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{ 
    return YES; 
} 

Và trong AppDelegate.h, tuyên bố rằng các lớp phù hợp với các giao thức NSUserNotificationCenterDelegate:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate> 
+0

bạn có thể xây dựng về cách ghi đè userNotificationCenter ? (xin lỗi im thực sự mới này :)) – haseo98

+3

@ haseo98 Yup, tôi vừa thêm một ví dụ cho câu trả lời của tôi. – alexjohnj

+0

Im nhận được lỗi bên cạnh phần applicationdidfinishlaunching của phương thức, Gửi 'AppDelegate * const __strong' đến tham số của loại không tương thích 'id '. Bất kỳ ý tưởng? – haseo98

Các vấn đề liên quan