View-Controller: Wie programmgesteuert zwischen Ansichten wechseln?

Kurz: ich will zwei Vollbild-Ansichten, wo ich Umschalten kann zwischen Ansicht A und Ansicht B. ich weiß, dass ich könnte, verwenden Sie einfach einen Tab Bar Controller, aber ich will nicht. Ich will sehen, wie Sie dies von hand gemacht, für das lernen, was Los ist unter der Haube.

Habe ich ein UIViewController, das wirkt wie ein root-controller:

@interface MyRootController : UIViewController {
    IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;

@end

Den contentView angeschlossen wird, bis zu einer UIView, die ich Hinzugefügt als eine Untersicht auf "Ansicht" an der Spitze. Dieser ist grün und ich sehe es Vollbild. Funktioniert einwandfrei.

Dann habe ich zwei andere View-Controller so ziemlich die gleiche Weise. ViewControllerA und ViewControllerB. ViewControllerA hat einen blauen hintergrund, ViewControllerB hat einen schwarzen hintergrund. Nur um zu sehen das man aktiv ist.

So, in der Umsetzung von myRootController, Tue ich dies:

//Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
    [self.contentView addSubview:vcA.view];

    [cvA release];
}

Durch die Art und Weise, die -initWithNib Methode sieht wie folgt aus:

- (id)initWithNib { //Load the view nib
    if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
        //do ivar initialization here, if needed
    }
    return self;
}

Funktioniert. Ich sehe den Blick von ViewControllerA, wenn ich starten Sie die app. Jetzt aber die große Frage ist: Eines View-Controller hat in der Regel alle diese Methoden wie:

  • (void)viewWillAppear:(BOOL)animated;
  • (void)viewDidDisappear:(BOOL)animated;
  • (void)viewDidLoad;

...und so weiter. Wer oder was, oder wie würden Sie diese Methoden werden aufgerufen, wenn ich "meinen" Weg zu gehen, ohne einen tab bar controller? Ich meine: Wenn ich zuordnen, die ViewController-Klasse und der Aussicht bekommen, die sichtbar ist, würde ich aufpassen, über den Aufruf dieser Methoden? Woher weiß er, dass viewWillAppear, viewDidDisappear, oder viewDidLoad? Ich glaube, dass die Tab Bar Controller hat alle diese "cleverness" ist unter der Haube. Oder bin ich da falsch?

UPDATE: ich habe es getestet. Wenn ich Version des view-Controllers (zum Beispiel: ViewControllerA), bekomme ich keine log-Nachricht auf viewDidDisappear. Nur bei der Zuweisung und Initialisierung der ViewControllerA, bekomme ich eine viewDidLoad. Aber das ist es. Damit stehen alle Zeichen für die cleverness von UITabBarController jetzt 😉 und ich habe, um herauszufinden, wie zu replizieren, oder?

InformationsquelleAutor der Frage Thanks | 2009-05-26

Schreibe einen Kommentar