В SDK 10.10 все изменилось - я думаю, что звонки проще для понимания.Родительское окно отвечает за запуск дочернего NSWindow в виде листа - и затем вы передаете этот дочерний NSWindow в NSApp для запуска модально.Затем сделайте обратное, чтобы развернуть.
Отображение листа
Чтобы отобразить лист вместо вызова:
[NSApp beginSheet:theSheet
modalForWindow:(NSWindow *)_window
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
Теперь вы вызываете родителяокно:
(void)beginSheet:(NSWindow *)sheetWindow
completionHandler:(void (^)(NSModalResponse returnCode))handler
А затем, чтобы запустить лист как в модальном цикле, вы также должны вызвать NSApp с:
- (NSInteger)runModalForWindow:(NSWindow *)aWindow
Заключительный лист
Чтобы закрыть лист, вызовите в родительском окне:
- (void)endSheet:(NSWindow *)sheetWindow
, что вызывает завершение завершения из вышеупомянутого вызова, - в котором вы можете поместить вызов, чтобы остановить запуск модального окна, вызвавNSApp с:
- (void)stopModalWithCode:(NSInteger)returnCode
Полный пример
@implementation AppDelegate
@synthesize window = _window;
- (IBAction) showTheSheet:(id)sender {
[_window beginSheet: theSheet
completionHandler:^(NSModalResponse returnCode) {
[NSApp stopModalWithCode: returnCode];
}];
[NSApp runModalForWindow: theSheet];
}
-(IBAction)endTheSheet:(id)sender {
[_window endSheet: theSheet];
}
@end