¿Cómo cambiar de un UIViewController a otro?

Tengo un problema al cambiar de un controlador de vista a otro.

Esto es lo que tengo:

En mi "AppDelegate_iPad.m":

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    

    CGRect frame = [UIScreen mainScreen].bounds;
    window = [[UIWindow alloc] initWithFrame:frame];
    window.backgroundColor = [UIColor blackColor];

    LoginViewController_iPad *loginView = [[LoginViewController_iPad alloc] initWithNibName:@"LoginViewController_iPad" bundle:nil];
    [window addSubview:loginView.view];


    [self.window makeKeyAndVisible];

    return YES;
}

Eso funciona. Ahora tengo un botón de inicio de sesión en esa pantalla y cuando lo presiono se llama esto:

- (IBAction)doPressLoginButton
{
    DebugLog(@"doPressLoginButton");

    MenuViewController_iPad *menuView = [[MenuViewController_iPad alloc] initWithNibName:@"MenuViewController_iPad" bundle:nil];
    [self.navigationController pushViewController:menuView animated:YES];
    [menuView release];

}

El problema es que no pasa nada. ¿Supongo que me falta el controlador de navegación real?

Espero que alguien pueda ayudar.

Gracias

preguntado el 08 de enero de 11 a las 17:01

2 Respuestas

Debe crear una variable de instancia UINavigationController en el delegado de su aplicación. Luego, asegúrese de sintetizarlo y liberarlo en su método dealloc.

Tu implementación de application:didFinishLaunchingWithOptions: podría verse así:

- (BOOL) aplicación: (UIApplication *) aplicación didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {// la ventana suele ser un marco IBOutlet CGRect = [UIScreen mainScreen] .bounds; ventana = [[UIWindow alloc] initWithFrame: frame]; window.backgroundColor = [UIColor blackColor]; LoginViewController_iPad * loginView = [[LoginViewController_iPad alloc] initWithNibName: @ paquete "LoginViewController_iPad": nulo]; navigationController = [[UINavigationController alloc] initWithRootViewController: loginView]; [versión de loginView]; [self.window addSubview: navigationController.view]; [self.window makeKeyAndVisible]; devuelve SÍ; }

Ahora podrá utilizar self.navigationController.

Respondido el 09 de enero de 11 a las 14:01

En cuanto a su comentario acerca de que window es un IBOutlet. Bueno, lo sé, pero trabajo sin MainWindow.xib, así que creo la ventana yo mismo. - eemceebee

¿Supongo que me falta el controlador de navegación real?

tienes razón. :D

self.navigationController devuelve nil si no configura un NavigationController.
Y cualquier mensaje enviado a nil el objeto será ignorado.

Si solo necesita cambiar de uno a otro. utilizando

[self presentModalViewController:modalViewController animated:YES]; 

en vez.

Respondido el 09 de enero de 11 a las 08:01

Cambiar estaría bien, pero presentModalViewController arroja un error: solicitud del miembro 'presentModalViewController' en algo que no es una estructura o unión - eemceebee

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.