NSViewController i wiele podviewów z Nib

Mam problem z wczytywaniem widoków za pomocą narzędzia Interface Builder i NSViewController.

Moim celem jest posiadanie widoku, który spełnia następujący opis: Górny pasek na górze (jak pasek narzędzi, ale nie dokładnie), który obejmuje całą szerokość widoku, i drugi "Widok zawartości" poniżej. Ten widok kompozytowy należy do mojej podklasy NSViewController.

Sensowne było użycie do tego narzędzia Interface Builder. Stworzyłem widok i dodałem do niego dwa podglądy, położył są one prawidłowo (z górnym paskiem i widokiem zawartości). Ustawiłem {[2] } na MyViewController, i podłączone gniazdka i takie tam.

Widoki, które chcę załadować (pasek i zawartość) są również w swoich własnych stalówkach (to może być to, co mnie denerwuje) i te stalówki mają swoją niestandardową klasę ustawioną na odpowiednią podklasę NSView, gdzie ma to zastosowanie. Nie jestem pewien, co ustawić jako ich File's Owner (zgaduję MyController, ponieważ powinien to być ich właściciel).

Niestety, kiedy init instancją MyViewController żaden z moich stalówki faktycznie wyświetlają. Dodałem go do contentView mojego okna poprawnie (sprawdziłem inaczej), a właściwie rzeczy się ładują. Oznacza to, że {[7] } jest wysyłany do widoku paska, ale nie wyświetla się w oknie. Myślę, że na pewno mam jakieś Kable skrzyżowane gdzieś. Może ktoś mógłby pomóc, by złagodzić moją frustrację?

EDIT some code to show what I ' m doing

Kontroler jest ładowany po zakończeniu uruchamiania mojej aplikacji, z aplikacji delegat:

MyController *controller = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
[window setContentView:[controller view]];

A potem w moim initWithNibName nic nie robię, ale na razie dzwonię do super.

Author: jbrennan, 2009-11-13

2 answers

Podczas rozdzielania każdego widoku na własną stalówkę i używania NSViewController, typowym sposobem obsługi rzeczy jest utworzenie NSViewController podklasy dla każdego z Twoich stalówek. Właściciel pliku dla każdego odpowiedniego pliku nib zostanie wtedy ustawiony na podklasę NSViewController, a Ty podłączysz wyjście view do własnego widoku w nib. Następnie, w kontrolerze widoku kontrolującym Widok zawartości głównego okna, tworzysz instancje każdej z podklas NSViewController, a następnie dodajesz widok kontrolera do swojego okno.

Szybki bit kodu - w tym kodzie wywołuję główny kontroler widoku zawartości MainViewController, kontrolerem dla "paska narzędzi" jest TopViewController, a reszta zawartości to ContentViewController

//MainViewController.h
@interface MainViewController : NSViewController
{
    //These would just be custom views included in the main nib file that serve
    //as placeholders for where to insert the views coming from other nibs
    IBOutlet NSView* topView;
    IBOutlet NSView* contentView;
    TopViewController* topViewController;
    ContentViewController* contentViewController;
}

@end

//MainViewController.m
@implementation MainViewController

//loadView is declared in NSViewController, but awakeFromNib would work also
//this is preferred to doing things in initWithNibName:bundle: because
//views are loaded lazily, so you don't need to go loading the other nibs
//until your own nib has actually been loaded.
- (void)loadView
{
    [super loadView];
    topViewController = [[TopViewController alloc] initWithNibName:@"TopView" bundle:nil];
    [[topViewController view] setFrame:[topView frame]];
    [[self view] replaceSubview:topView with:[topViewController view]];
    contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil];
    [[contentViewController view] setFrame:[contentView frame]];
    [[self view] replaceSubview:contentView with:[contentViewController view]];
}

@end
 71
Author: Brian Webster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-13 01:29:31

Czy MainViewController nie powinien być podklasą NSWindowController? Oraz wyloty w klasie połączone z wyświetlaniem elementów w głównym oknie w MainMenu.xib? Miejmy nadzieję, że stare wątki są nadal czytane...

 2
Author: robject,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-22 14:55:53