Cambiar viewController en hacer clic en el button

Soy nuevo en la progtwigción de iPhone. Lo que estoy intentando es tener una pantalla con un button. Y quiero cambiar el controller de vista no solo la vista cuando hago clic en ese button (sé cómo agregar la subvista) porque desde ese segundo control de vista, debo ir a la tercera vista que no es posible si agrego la subvista en primer lugar lugar. ¿Alguien puede ayudarme con eso? es posible? y si es así, ¿cómo? Todas las vistas y el controller de vista se crean de forma programática. No estoy usando IB.

EDITAR: aquí está el código relevante que se dispara onclick en el button

-(id)showCurrentLoc:(id)sender { locationController = [currentLocController alloc]; [entry removeFromSuperview]; [newLoc removeFromSuperview]; [currentLoc removeFromSuperview]; [self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; [self.navigationController pushViewController:locationController animated:YES]; [locationController release]; return 0; } //Location Controller is the tableViewController 

Gracias Vik

Por lo general, utiliza un controller de navigation para este tipo de cosas para que el usuario pueda volver fácilmente a la vista anterior. Su controller de vista haría algo como esto:

 [self.navigationController pushViewController:someNewViewController animated:YES]; 

Si desea administrar los controlleres de vista usted mismo, siempre puede cambiar la propiedad rootViewController la window. Lea la Guía de progtwigción de la controllera para ver la image completa.

Puedes hacer algo como esto

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

UINavigationController es lo que necesitas. Administra una stack de UIViewController s y si desea agregar un nuevo UIViewController, simplemente insértelo en esta stack de navigation. Automatiza el comportamiento del button de retroceso para usted, y puede hacer estallar su UIViewController actual de la stack cada vez que haya terminado con él.

Podrías trabajar con un UINavigationController. Agregando su primer UIViewController así en el método init:

  [self setViewControllers:[NSArray arrayWithObject:viewController]]; 

Y luego, cuando se hace clic en un button o se realiza una elección, empuje el segundo controller con (en el primer controller de vista):

 [self.navigationController pushViewController:controller animated:YES]; 

De esta manera, también obtendrá un button automático (atrás). Básicamente, creas una stack de UIViewControllers que puedes empujar y abrir con una stack normal.

Espero que esto ayude. Observe lo siguiente: UINavigationController Class Reference

 - (void) loadViewAtIndex:(NSInteger)index { [self unloadViewAtIndex:activeViewIndex]; switch (index) { case 1: { if (viewController1 == nil) { viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil]; } viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height); [window addSubview:viewController1.view]; } break; case 2: { if (viewController2 == nil) { viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; } viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height); [window addSubview:viewController2.view]; } break; default: break; } activeViewIndex = index; } - (void) unloadViewAtIndex:(NSInteger)index { switch (index) { case 1: { if (viewController1 != nil) { [viewController1.view removeFromSuperview]; [viewController1 release]; viewController1 = nil; } } break; case 2: { if (viewController2 != nil) { [viewController2.view removeFromSuperview]; [viewController2 release]; viewController2 = nil; } } break; default: break; } }