В какао эти называются листы. Взгляните на sheet programming guide, однако это ужасно устарело!
Вам необходимо позвонить -beginSheet:completionHandler:
в окно, которое вы хотите отобразить на листе. Если у вас есть приложение, в одном окне можно задать AppDelegate для окна и запуск листа, как это так,
// This code should be in AppDelegate which implement the -window method
NSWindow *targetWindow = [self window]; // the window to which you want to attach the sheet
NSWindow *sheetWindow = self.sheetWindowController.window // the window you want to display at a sheet
// Now start-up the sheet
[targetWindow beginSheet:sheetWindow completionHandler:^(NSModalResponse returnCode) {
switch (returnCode) {
case NSModalResponseCancel:
NSLog(@"%@", @"NSModalResponseCancel");
break;
case NSModalResponseOK:
NSLog(@"%@", @"NSModalResponseOK");
break;
default:
break;
}
}];
Вы заметите, что когда лист завершает он будет возвращать определенный ответ модального --- мы возвратимся к этому моменту в ближайшее время.
Затем вам необходимо реализовать содержимое, которое вы хотите отобразить на листе; это должно быть сделано в NSWindow. Мне гораздо проще использовать NSWindowController и реализовать это окно в отдельном файле XIB. Например, смотрите ниже,
Теперь вам нужно реализовать код в пользовательских NSWindowController (или просто NSWindow если вы старой школы и любят управлять собственной NIB загрузки), который будет выдавать правильный модальный отклик. Здесь я подключил кнопки отмены и ОК следующих способов действия,
- (IBAction)cancelButtonAction:(id)sender {
[[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseCancel];
}
- (IBAction)OKButtonAction:(id)sender {
[[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseOK];
}
модель ответ будет передаваться на ваш блок обработчика завершения.
Sample project on github.
спасибо. Как насчет отображения листа в popover? – Kaunteya
Popovers - это другая технология. Вы не будете показывать лист в popover, вам просто нужно предоставить popover представление для отображения. Прочтите руководство по интерфейсу пользователя, когда и где использовать popover vs. Popovers - довольно новая технология в Cocoa, и API намного приятнее. –
@boyfarell beginSheet кажется устаревшим – Kaunteya