为iPhone/iPad的

问题描述:

UIViewController的问题,我有一个应用程序与一个的MainWindow.xib文件。然后我有ViewControllerA.xib和ViewControllerB.xib。我的MainWindow.xib有一个指向两个ViewControllerA.xib的ViewController。为iPhone/iPad的

在ViewControllerA我有一个按钮,我想按钮,按下时,移动ViewControllerB到屏幕上。我怎么做?

我尝试这样的代码,但我想我失去了一些东西:

- (IBAction)btMyButton:(id)sender 
{ 
    ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil]; 
    [[UIApplication sharedApplication].keyWindow addSubview:viewController.view]; 
    [self.navigationController pushViewController:viewController animated:YES]; 
} 

我ViewControllerB确实出现,但它是在屏幕的顶部压扁,较前视图。任何帮助是极大的赞赏。

谢谢

+1

如果您没有使用导航控制器项目,则您的self.navigationController可能未添加到窗口中,也可能为零。 – 2011-05-16 19:20:04

+0

是的,你是对的,我没有NavigationController。我是不是该?我想如果我把一个NavigationController,我会有横跨顶部的酒吧。我不想让第一个屏幕在顶部显示栏,但是当用户单击按钮时,我将转到导航控制器视图。 – LilMoke 2011-05-16 19:26:15

+0

你不需要了吧,如果你不想,你可以使用[自我presentModalViewController:动画:]如果你只是想推一个视图控制器,然后调用dissmissModelViewController:上称为目前认为:动画...这可以通过self.parentViewController完成。 – 2011-05-16 19:31:55

确保控制器B的观点有正确的HIGHT你应该减去导航栏高度44像素和状态栏20像素为好。这些值适用于iPhone。

- (IBAction)btMyButton:(id)sender 
    { 
     //you should load from the main app bundle 
     ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:[NSBundle mainBundle]]; 
     // you don't need the following line  
     //[[UIApplication sharedApplication].keyWindow addSubview:viewController.view]; 
     [self.navigationController pushViewController:viewController animated:YES]; 
     [viewController release]; 
    } 

更新 由于上述评论说,如果你可能没有一个导航控制器推控制器B进入。因此,添加导航控制器到主窗口,而不是视图控制器,并使其根视图控制器,你控制器A

我希望这可以帮助你,

删除第二行:

[[UIApplication sharedApplication].keyWindow addSubview:viewController.view]; 

您两次添加视图。第二行和第三行都将视图添加到不同位置的视图层次结构中。

--update-- 如果您删除第二行并且没有看到您的视图,那么self.navigationController最有可能为零。改为尝试[self presentModalViewController:]。

+0

是的,我没有删除它,然后什么也没有发生,我根本没有看到ViewControllerB。另外,要注意,我在我的ViewControllerA类中有这个按钮。所以我在质疑自我? – LilMoke 2011-05-16 19:16:13

,你将需要从主窗口移除旧的视图 - 控制。

- (IBAction)btMyButton:(id)sender 
{ 

//Assuming you declare two Iboutlet controllerA, controllerB mapping with that view as class variable 
{ 
if (self.controllerB == nil) 
{ 
    ViewControllerB * viewController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil]; 
    self.controllerB = viewController; 
[viewController release]; 
} 
[controllerA.view removeFromSuperview]; 
[self.view insertSubview:controllerB.view atIndex:0]; 
} 

}