2011-01-30 3 views
2

Как загрузить наконечник внутри другого окна?загрузочные наконечники в какао

Я попытался initWithWindowName,

if (mmController == NULL) 
    mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"]; 
[mmController showWindow:self]; 

но открывает новое окно.

Я также попытался loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self]; 

и это удалось, но когда я пытаюсь использовать тот же метод, чтобы вернуться в главное меню,

[NSBundle loadNibNamed:@"mainMenu" owner:self]; 

он не работает. Он ничего не делает ... Любые идеи?

ответ

8

Я попытался initWithWindowName,

Вы имеете в виду initWithWindow¹Nib²Name³:, который принимает имя (3) из кончика пера (2), содержащего окно (1).

if (mmController == NULL) 

Это должно быть nil, не NULL, так как вы сравниваете указатель на объект Objective-C.

mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"]; 

Что mainMenu здесь? Это должен быть класс, но что это подкласс?

[mmController showWindow:self]; 

Из этого сообщения и предыдущего сообщения, я угадывание mainMenu подкласс NSWindowController.

Угадать не требуется. Вы должны назвать свои классы специально, чтобы кто-нибудь мог сказать, что такое класс, а его экземпляры - просто именем класса.

Brevity - это добродетель, но если вам нужно долго идти, идите долго. У нас есть современные инструменты с завершением имени. Ключ вкладки может исключить единственное преимущество сокращенного имени.

но оно открывает новое окно.

Да. Вы создали окно, загрузив его из наконечника, а затем вы сказали оконному контроллеру, чтобы показать это окно. Отображение нового окна - ожидаемый результат.

Я также попытался loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self]; 

и это удалось, но когда я пытаюсь использовать тот же метод, чтобы вернуться в главное меню,

Существует нет «вернуться ».Загрузка ниба - это просто создание объектов путем их загрузки из архива. Вы можете загружать один и тот же nib несколько раз, а загрузка ниба не отменяет результаты загрузки предыдущего наконечника.

Возможно, вы захотите прочитать Resource Programming Guide, в котором указаны перья, а также изображения и звуковые файлы, а также Bundle Programming Guide.

Если вы хотите скрыть окно, которое вы загрузили из наконечника mainGame, сделайте это. Термин для этого в AppKit равен “ordering out” (в отличие от «упорядочивания»), которые являются конкретными способами: “ordering front” и “ordering back”).

[NSBundle loadNibNamed:@"mainMenu" owner:self]; 

он не работает. Он ничего не делает ...

Вы пытаетесь загрузить MainMenu nib, который пришел с вашим проектом? Если это так, убедитесь, что вы правильно поняли это дело: вы не хотите, чтобы ваше приложение было нарушено для людей, которые запускали его из тематического тома, и вы не хотите, чтобы он был нарушен для людей, которые используют нечувствительность к регистру по умолчанию файловая система.

Если это не то, что вы пытаетесь сделать, тогда неясно, что вы пытаетесь сделать. MainMenu - это, как правило, значок, содержащий основное меню (содержимое строки меню); называя любой другой nib «mainMenu» или что-то в этом роде, в лучшем случае приведет к путанице и проблемам в худшем случае. Если это должен быть какой-то другой наконечник, вы должны дать ему другое имя.

В любом случае, это не то, что вам нужно делать. Если вы хотите скрыть окно, которое вы загрузили с mainGame, вам нужно скрыть это окно, а не загружать другой нить.

Кроме того, как только окно будет загружено, не загружайте его (если вы не закроете его и не отпустите). Как только вы его загрузите, вы можете просто заказать его обратно. Скорее всего, вы захотите как make it key and order it front.

На Mac вы не ограничены одним окном за раз; действительно, ваше приложение имеет несколько окон (по крайней мере три), независимо от того, что вы делаете. API-интерфейсы построены вокруг вашей способности показывать несколько окон.

Для получения дополнительной информации см. Window Programming Guide.

Как я могу загрузить наконечник внутри другого окна?

Как Джастин Meiners уже говорил, вы можете NSViewController для этого, хотя вы можете пойти без и просто загрузить перо, содержащее мнение непосредственно с помощью loadNibNamed:.

Будьте предупреждены, что NSViewController не такой мощный и функциональный, как UIViewController от Cocoa Touch.

Для этого вам необходимо прочитать View Programming Guide.

Смежные вопросы