Tôi đã tìm ra một bản hack để giải quyết vấn đề này. Không có thông báo rằng tín hiệu rằng một cửa sổ đã được đặt trên màn hình, nhưng có một thông báo được đảm bảo khá nhiều để được gửi khi cửa sổ được đặt trên màn hình. Tôi đang nói về NSWindowDidUpdateNotification
, cho biết cửa sổ đã tự làm mới.
Tất nhiên, nó không phải là chỉ được gửi khi cửa sổ xuất hiện — nó được gửi mỗi lần cửa sổ cập nhật. Không cần phải nói, thông báo này được gửi lô nhiều lần. Vì vậy, bạn muốn xem cho nó lần đầu tiên, làm điều của bạn, và bỏ qua bất kỳ thông báo tiếp theo. Trong trường hợp của tôi, tôi muốn thêm một trang tính vào một cửa sổ mà một phần khác của ứng dụng của tôi sẽ đặt hàng sau này. Vì vậy, tôi đã làm một cái gì đó như thế này:
__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
[self showSetupSheet];
[NSNotificationCenter.defaultCenter removeObserver:observer];
}];
Không có lý do đặc biệt mà bạn sẽ phải sử dụng một quan sát viên-một người quan sát phương pháp dựa trên khối dựa trên sẽ chỉ làm việc tốt.
Nguồn
2013-04-23 05:45:59
'windowDidExpose: 'là cho một cửa sổ đã được sắp xếp trong đang được tiết lộ bởi các cửa sổ khác b eing ra lệnh cho nó. –
Oh cảm ơn vì đã làm rõ. Thật khó để biết chỉ với mô tả trong tài liệu tham khảo. – Eonil
Mô tả tốt hơn cho thông báo rằng phương thức đó tương ứng với: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/ c/data/NSWindowDidExposeNotification –