为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确实出现,但它是在屏幕的顶部压扁,较前视图。任何帮助是极大的赞赏。
谢谢
确保控制器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:]。
是的,我没有删除它,然后什么也没有发生,我根本没有看到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];
}
}
如果您没有使用导航控制器项目,则您的self.navigationController可能未添加到窗口中,也可能为零。 – 2011-05-16 19:20:04
是的,你是对的,我没有NavigationController。我是不是该?我想如果我把一个NavigationController,我会有横跨顶部的酒吧。我不想让第一个屏幕在顶部显示栏,但是当用户单击按钮时,我将转到导航控制器视图。 – LilMoke 2011-05-16 19:26:15
你不需要了吧,如果你不想,你可以使用[自我presentModalViewController:动画:]如果你只是想推一个视图控制器,然后调用dissmissModelViewController:上称为目前认为:动画...这可以通过self.parentViewController完成。 – 2011-05-16 19:31:55