View Controllers: ¿Cómo cambiar entre vistas mediante programación?

n resumen: quiero tener dos vistas de pantalla completa, donde puedo cambiar entre la vista A y la vista B. Sé que podría usar un controlador de barra de pestañas, pero no quiero. Quiero ver cómo se hace esto a mano, para saber qué sucede debajo del capó.

Tengo un UIViewController que actúa como un controlador raíz:

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

@end

El contentView está conectado a una UIView que agregué como una subvista a la "vista" del Nib. Esto tiene color verde y lo veo a pantalla completa. Funciona bien

Luego, creé otros dos controladores de vista de la misma manera. ViewControllerA y ViewControllerB. ViewControllerA tiene un fondo azul, ViewControllerB tiene un fondo negro. Solo para ver cuál está activo.

Entonces, en la implementación de myRootController, hago esto:

// 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];
}

Por cierto, el método -initWithNib se ve así:

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

Eso funciona. Veo la vista de ViewControllerA cuando inicio la aplicación. Pero ahora la gran pregunta es: un controlador de vista normalmente tiene todos esos métodos como:

(vacío) viewWillAppear: (BOOL) animado; (vacío) viewDidDisappear: (BOOL) animado; (vacío) viewDidLoad;

...y así. ¿Quién o qué, o cómo se llamarían esos métodos si lo hago "a mi manera" sin un controlador de barra de pestañas? Quiero decir: si asigno esa clase de ViewController y la vista se hace visible, ¿debería tener cuidado de llamar a esos métodos? ¿Cómo sabe que viewWillAppear, viewDidDisappear o viewDidLoad? Creo que el Tab Bar Controller tiene toda esta "inteligencia" debajo del capó. ¿O me equivoco?

ACTUALIZACIÓN: lo he probado. Si libero el controlador de vista (por ejemplo: ViewControllerA), no recibiré ningún mensaje de registro en viewDidDisappear. Solo al asignar e inicializar ViewControllerA, obtengo un viewDidLoad. Pero eso es todo. Entonces, todas las señales representan la inteligencia de UITabBarController ahora;) y tengo que descubrir cómo replicar eso, ¿verdad?

Respuestas a la pregunta(8)

Su respuesta a la pregunta