我是iPhone编程新手。我正在尝试的是我有一个带按钮的屏幕。而且我想改变视图控制器,不仅是我点击那个按钮时的视图(我知道如何添加子视图),因为从第二个视图控制器,我必须转到第三个视图,如果我先添加子视图,这是不可能的地点。有人可以帮帮我吗?这可能吗?如果是,怎么样?所有视图和视图控制器都是以程序方式创建的。我没有使用IB。
编辑:这是单击按钮时触发的相关代码
-(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
由于 维克
答案 0 :(得分:4)
你可以做这样的事情
YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
[self.navigationController pushViewController:objYourViewController animated:YES];
[YourViewController release];
答案 1 :(得分:3)
通常,您使用导航控制器进行此类操作,以便用户可以轻松返回上一个视图。您的视图控制器将执行以下操作:
[self.navigationController pushViewController:someNewViewController animated:YES];
如果您想自己管理视图控制器,您可以随时更改窗口的rootViewController
属性。请阅读View Controller Programming Guide以获取完整图片。
答案 2 :(得分:2)
UINavigationController就是您所需要的。它管理一堆UIViewController
s,如果你想添加新的UIViewController,只需将其推入此导航堆栈即可。它为您自动化后退按钮行为,并且您可以在完成后从堆栈中弹出当前的UIViewController。
答案 3 :(得分:0)
您可以使用UINavigationController。在init方法中添加这样的第一个UIViewController:
[self setViewControllers:[NSArray arrayWithObject:viewController]];
然后当点击一个按钮或做出选择时,按下第二个控制器(在第一个viewController中):
[self.navigationController pushViewController:controller animated:YES];
这样你也会得到一个自动(后退按钮)。基本上你创建了一堆UIViewControllers,你可以像普通的堆栈一样推送和弹出。
我希望这会有所帮助。请看以下内容: UINavigationController Class Reference
答案 4 :(得分:0)
- (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;
}
}