2011-02-07 1 views
3

Как работать с несколькими окнами в какао? Я создал приложение для какао. Когда я запускаю это приложение, он автоматически показывает окно по умолчанию. Я добавил кнопку в окне. Когда я нажимаю кнопку, я хочу открыть другое окно с именем MySecondWindow, которое я создал в IB ..Работа с несколькими Windows с помощью конструктора интерфейсов

Я создал контроллер окна (MySecondWindowController) для MySecondWindow и связал его с иглой в IB. Когда я нажимаю кнопку в главном окне, я вызываю IBAction, который создает экземпляр MySecondWindowController и вызывает метод NSApp beginSheet: с [mySecondWindowObj window]. Я получаю сообщение Modal session requires modal window в NSlog. Когда я пытаюсь напечатать [mySecondWindowObj window] в NSLog, он печатает null ..

Я не знаю, что делать. Каковы необходимые вещи, чтобы сделать эту работу? Мне нужна помощь ..

спасибо ..

+0

Это приложение на основе документов? Является ли 'MySecondWindow' в своем собственном файле nib? –

+0

Нет его приложения на основе документов. Да, MySecondWindow находится в собственном файле nib. – EmptyStack

ответ

3
YourWindowController* sheet; 

[[NSApplication sharedApplication] beginSheet:[sheet window] 
           modalForWindow:[[NSApplication sharedApplication] mainWindow] 
           modalDelegate:nil 
           didEndSelector:nil 
            contextInfo:nil]; 

Убедитесь, что ваше окно правильно создается. Убедитесь, что опция «Видимый при запуске» в IB не проверяется.

EDIT: Я заметил, что вы загружаете это окно из отдельного файла. Убедитесь, что вы правильно загрузили его. Используйте:

YourWindowController* sheet = [[YourWindowController alloc] initWithWindowNibName:@"NameOfNibMinusExtension"]; 

ТАКЖЕ:

Проверьте и убедитесь, что тип «File Владелец» установлен на имя класса вашего пользовательского контроллера оконного, и что это «окно» устанавливается в окно в СИБ.

Щелкните правой кнопкой мыши (или Cmd + Click) на Владелец файла и убедитесь, что свойство «окно» подключено к соответствующему окну. Кроме того, еще раз убедитесь, что «Visible on Launch» окна НЕ проверено.

1

Удерживая нажатой клавишу Control, нажмите и удерживайте кнопку, затем протяните линию к MySecondWindow. Это даст вам маленький черный ящик, полный методов: выберите makeKeyAndOrderFront:.

Что это означает, что кнопка (экземпляр NSButton) отправляет сообщение makeKeyAndOrderFront: в окно при нажатии кнопки. Кнопка является подклассом NSControl, который реализует так называемую целевую/действительную систему в Cocoa. Интерфейс Builder, когда вы перетаскиваете линию, задает цель кнопки MySecondWindow, а действие должно быть makeKeyAndOrderFront:. Затем NSButton запрограммирован внутри, чтобы отправить сообщение о действии на цель, когда он получает щелчок.

Имеют смысл?

+0

Спасибо за ваш ответ. Я могу добавить действия к кнопке. Но у меня возникла проблема с созданием и представлением окна в виде листа. Я отредактировал свой вопрос .. – EmptyStack