2012-12-31 25 views
7

Tôi có một lớp NSWindow tùy chỉnh mà có các phương pháp sau:NSWindow không nhận được bất kỳ thông báo khi nó mất tập trung

- (void)setupWindowForEvents{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignMainNotification object:self]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:self]; 
} 

-(void)windowDidResignKey:(NSNotification *)note { 
    NSLog(@"notification"); 
    [self close]; 
} 

tôi gọi [_window setupWindowForEvents]; nhưng windowDidResignKey không bao giờ được gọi.
Đây là cách tôi gọi NSWindow của tôi: khi mục thanh trạng thái được nhấp Tôi makeKeyAndOrderFront và Window sẽ được hiển thị ngay bên dưới mục trên thanh trạng thái, như thế này: enter image description here

Bất cứ ý tưởng tại sao tôi không nhận được bất kỳ thông báo khi cửa sổ mất tiêu điểm? Tôi đã sử dụng cả hai NSWindowDidResignMainNotificationNSWindowDidResignKeyNotification để xem có bất kỳ cách nào trong số này hoạt động hay không, nhưng không có cách nào hoạt động.

Trả lời

9

Có thể bạn không nhận được thông báo vì bạn thực sự không bao giờ là người chủ chốt ở vị trí đầu tiên. Cửa sổ của bạn dường như không có viền và cửa sổ không viền không lấy trạng thái cửa sổ chính theo mặc định.

Trong lớp con cửa sổ của bạn, hãy chắc chắn return YES trên các phương pháp sau:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

- (BOOL)canBecomeMainWindow { 
    return YES; 
} 
+0

cảm ơn bạn rất nhiều, hoàn toàn quên về điều đó. btw, u có thể vui lòng giải thích cho tôi sự khác biệt giữa các thông báo 'NSWindowDidResignMainNotification' và' NSWindowDidResignKeyNotification'? –

+4

Câu hỏi hay. Các cửa sổ chính là những cửa sổ hiện đang có trạng thái trả lời đầu tiên và phản hồi đầu vào của người dùng. Các cửa sổ chính giống như các cửa sổ chính, trừ khi chúng không nhất thiết phải có trạng thái trả lời đầu tiên. Cả hai tiểu bang đều xuất hiện tập trung. Điều này có thể được sử dụng cho bạn: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html –

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