在Button上单击更改viewController

我是iPhone编程新手。 我正在尝试的是我有一个button的屏幕。 我想改变视图控制器不仅是视图,当我点击该button(我知道如何添加子视图),因为从第二个视图控制器,我必须去第三个视图是不可能的,如果我在第一个子视图地点。 有人可以帮我吗? 这可能吗? 如果是的话,怎么样? 所有的视图和视图控制器都是编程创build的。 我没有使用IB。

编辑:这里是点击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 

谢谢维克

通常情况下,您使用导航控制器来处理这种事情,以便用户可以轻松地返回到上一个视图。 你的视图控制器然后会做这样的事情:

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

如果你想自己pipe理视图控制器,你可以随时更改窗口的rootViewController属性。 请阅读视图控制器编程指南了解完整的图片。

你可以做这样的事情

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

UINavigationController是你所需要的。 它pipe理着一堆UIViewController ,如果你想添加新的UIViewController,只需将它推入这个导航堆栈。 它会自动为你的后退button行为,你可以从堆栈中popup当前的UIViewController,每当你完成它。

你可以使用UINavigationController。 在init方法中像这样添加你的第一个UIViewController:

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

然后,当一个button被点击或做出select时,用第二个控制器(在第一个viewController中)推动第二个控制器:

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

这样你也会得到一个自动(后退button)。 基本上,你创build了一堆UIViewControllers,你可以用一个普通的堆栈来压入和popup。

我希望这有帮助。 看看以下内容: UINavigationController类参考

 - (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; } }