Работа с несколькими окнами с помощью Interface Builder - PullRequest
3 голосов
/ 07 февраля 2011

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

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

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

Спасибо ..

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011
YourWindowController* sheet;

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

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

РЕДАКТИРОВАТЬ: я только что заметил, что вы загружаете это окно из отдельного файла пера. Убедитесь, что вы загружаете его правильно. Используйте это:

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

ТАКЖЕ:

Проверьте и убедитесь, что для типа «Владелец файла» задано имя класса пользовательского оконного контроллера, а для его «окна» задано окно в Nib.

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

1 голос
/ 07 февраля 2011

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

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

Имеет смысл?

...