2012-04-15 2 views
2

Я создаю тестовое приложение, пытаясь использовать MVC для Mac.Что эквивалентно initWithNibName: на OSX?

Я создал 5 файлов nib, каждый из которых имеет разные окна и файлы классов для каждого nib.

Что мне делать, если при нажатии кнопки на MainMenu.xib открывается новый вид?

Я видел использование initWithNibName:, для iOS, но не могу найти, как это работает на Mac. Или я об этом ошибаюсь? Если да, то как вы управляете разными представлениями и классами в приложении Mac с Xcode?

+1

Когда вы говорите «открыть новый вид», вы имеете в виду «открыть новое окно»? – Vervious

+0

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

+2

Вы имеете в виду ... закрыть текущее окно и открыть новое окно или просто переключить виды содержимого внутри? Нитки могут представлять собой окна или виды, поэтому я не уверен, что вы имеете в виду. – Vervious

ответ

10

Потому что вы упомянули «Я создал 5 файлов nib, каждый с разными окнами и файлы классов для каждого nib». Я предполагаю, что у вас есть 5 разных окон (а не просмотры) и хотите их открыть при нажатии кнопки.

Каждый файл окна с окном управляется NSWindowController, который будет C в MVC. Чтобы на самом деле загрузить файл nib (программно), вы назначили ему NSWindowController; NSWindowController в OS X сопоставим с UIViewController на iPhone.

NSWindowController *controller = [[NSWindowController alloc] initWithWindowNibName:@"nib1"] 

Затем вы можете открыть/закрыть окно, которым управляет NSWindowController.

[controller showWindow:nil] показать окно

[controller.window makeKeyAndOrderFront:self] сделать окно ключ окно.

Возможно, вы намерены сделать что-то еще, что должно поддерживать одно и то же окно, но переключать представление содержимого этого окна. В этом случае вам нужны файлы nib, содержащие представления (и использовать NSViewControllers для их загрузки), а не окна (потому что наличие окон будет избыточным).

Но даже если вы вставляете с окнами, чтобы заменить contentView:

[currentWindow setContentView:[newWindowController.window contentView]]; 

enter image description here

enter image description here

enter image description here

enter image description here

Вы должны прочитать ВСЕ документацию, которую Apple может предложить в Windows, представлениях и приложениях.

+0

Вы могли бы объяснить разницу между окнами и видами? так что, если у меня есть 5 разных наконечников, как бы я использовал этот код, чтобы закрыть текущий наконечник и открыть другое нажатие кнопки? спасибо большое за вашу помощь – Cristian

+2

Боюсь, вам придется самому провести исследование самостоятельно, это будет хороший процесс обучения. Как только вы поймете основы, этот вопрос не должен быть проблемой для решения. – Vervious

+0

Большое спасибо за такой отличный ответ. я просто не могу размахивать этим материалом, поэтому я думаю, что мне просто нужно будет прочитать всю документацию :) спасибо v много! – Cristian

1

окно в каком-то смысле в "рамку", то есть он имеет три цветные кнопки и название, и ничего другого. Каждое окно имеет представление содержимого, которое является основным видом окна, и отвечает за отображение содержимого, например. кнопки, текст, изображения. Сам контент обычно реализуется как представление, то есть NSButton и NSTextField - все подклассы NSView.

Эта часть документации Посмотреть OSX может быть полезно: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/WorkingWithAViewHierarchy/WorkingWithAViewHierarchy.html#//apple_ref/doc/uid/TP40002978-CH4-SW13

в частности, взглянуть на цифры 3-1 и 3-2.

Я надеюсь, что это поможет немного с пониманием. Затем, чтобы сделать то, что вы хотите сделать, выполните шаги, описанные в ответе Вербиз.

+0

спасибо большое:] – Cristian

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