Обмен представлениями - NSWindowController и NSViewController (s) - PullRequest
1 голос
/ 07 июля 2011

Я очень новичок в программировании на Mac OS. В данный момент я пытаюсь создать простое измерительное приложение, которое будет иметь одно окно с панелью инструментов вверху и соответствующий вид снизу. Нажатие кнопки на панели инструментов должно привести к переключению вида под ним - например, при нажатии на кнопку «Соединение» отобразятся настройки соединения, в «Измерениях» отобразятся текущие данные с устройства.

Проблема в том, что я не знаю, как обращаться с обменом мнениями, может быть, другими словами, что-то, что я знаю, но не совсем ... Я нашел подобное обсуждение здесь: NSViewController и несколько подпредставлений из Nib , но нет ответа, как создать NSWindowController и как назначить его в главном окне. Потому что, я думаю, необходимо создать NSWindowController, чтобы можно было менять местами представления. Если я ошибаюсь, поправьте меня.

Итак, я создаю новый проект (здесь он называется Sample), и есть файл SampleAppDelegate.h, который выглядит следующим образом:

@interface SampleAppDelegate : NSObject <NSApplicationDelegate> {
@private
    NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;

@end

Есть окно ivar, которое содержит единственное окно, созданное из MainMenu.xib (как я думаю).

Так как мне создать NSWindowController для окна из SampleAppDelegate?

Должен ли я просто создать свой подкласс WindowController и в функции - (void) applicationDidFinishLaunching: (NSNotification *) aNotification SampleAppDelegate как это:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    MyWindowController *wc = [[MyWindowController alloc] initWithWindow:self.window];

    [wc showWindow:self];
    self.myWindowController = wc;
    [wc release];

}

Буду очень признателен за любые подсказки и помощь.

Marcin

1 Ответ

2 голосов
/ 08 июля 2011

Вам не нужен NSWindowController для смены вида, NSWindowController используется (я думаю) только тогда, когда вам нужно несколько окон верхнего уровня.

Вы можете просто создать подкласс NSViewController для каждого типа представления, который вам нужен, поместить каждое представление в перо и вызвать - (NSView *) представление, когда вам необходимо поместить представление в нижнюю часть окна. Вы должны иметь возможность просто добавить его в окно, как обычно, или поместить в NSBox, используя setContentView: view

Для двух ваших представлений вы должны создать MeasurmentsViewController и ConnectionViewController. Затем вы создадите свои представления в MeasurementsView.nib и ConnectionView.nib и будете использовать эти кончики для инициализации ваших контроллеров представления.

Затем в главном окне, если вы хотите поместить NSBox, если вы хотите поместить в него MeasurementsView

NSView *measurementsView = [measurementsViewController view];
[boxAtBottomOfWindow setContentView:measurementsView];

и поместить в него ConnectionView

NSView *connectionView = [connectionViewController view];
[boxAtBottomOfWindow setContentView:connectionView];
...