Цел C - XIB натоварване в NSView

Аз съм нов в кодирането на Objective C и концепцията MVC ми причинява известна болка. Целта ми е да разработя приложение за Mac. Успях да създам .xib за главния прозорец. Започва добре. Моят основен NSWindow има своя основен NSView. В този NSView сложих 3 subwiews (с помощта на Interface Builder). Това, което искам, е да променя съдържанието на 2-ри подизглед (чрез зареждане на съдържанието от друг XIB файл, наречен SubWindow1.xib), когато щракна върху бутон, поставен в 1-ви подизглед.

Успявам да уловя щракването и опитах някакъв код за „xib loading“, но той не работи (съдържанието никога не се появява във втория ми подизглед).

Това, което направих е:

  • поставете NSButton (на 1-ви подизглед)
  • поставете NSObject на Interface Builder (класът е преименуван на CtMainWindow, "Ct" за Controler)
  • свържете IBAction (changeToSubWindow1) и IBOutlet (vSubView2, което е моят втори подизглед)
  • създайте клас CtMainWindow, създайте клас VwSubWindow1 (който разширява NSView)

В changeToSubWindow1() написах:

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadXib];
[vProfile.superview addSubview:vProfile];

Функцията loadXib() прави:

NSNib * nib = [[NSNib alloc] initWithNibNamed:[self @"SubWindow1"] bundle:nil];  //@"SubWindow1" is the name of the expected loaded xib without .xib extention
[nib instantiateWithOwner:self topLevelObjects:nil];

И готово. Надявах се, че зареждането на sub xib в изглед и поставянето на този изглед във втория ми подизглед ще се появи.

Също така се опитах да поставя само следния код в changeToSubWindow1()

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadSubWindow];

Функцията loadSubWindow() прави:

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

Без повече успех.

Вече прочетох много теми от stackoverflow и опитах много решения, но нито едно от тях не ми помогна.

Може ли някой да ми даде подсказката, от която се нуждая, за да заредя и покажа Xib в подизглед?

Благодаря предварително.


person Matrix    schedule 11.11.2012    source източник
comment
За протокола поставям Здравейте в началото на съобщението си, но то не се показва, ако редактирам съобщението си   -  person Matrix    schedule 12.11.2012


Отговори (1)


можете да опитате този метод

можеш да сложиш 3 xib файла и 3 windows-а. свържете всеки прозорец

self.packages = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[self.window1.contentView addSubview:self.vc.view];
self.packages.view.frame = ((NSView*)self.window1.contentView).bounds;
[window1 makeKeyAndOrderFront:NSApp];
person Kelvin Ricafort    schedule 08.09.2014