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.
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
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...
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