我有一个基于视图的应用程序,有三个xib文件,每个文件都有自己的视图控制器。我如何从一个改变到另一个?我使用它从xib 1移动到xib 2,但是当我使用相同的代码从xib 2移动到xib 1时,我在[self presentModal ....]行上得到一个EXC_BAD_ACCESS。
MapView *controller = [[MapView alloc] initWithNibName:@"MapView" bundle:nil];
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:controller animated:YES];
如何从一个xib自由移动到另一个?
答案 0 :(得分:2)
我认为你要做的是提出一个模态视图然后解雇它,对吧?如果是这种情况,那么你将下面的代码放在你用来解雇它的方法中(例如 - (IBAction)dissmissModalView)
[self.parentViewController dismissModalViewControllerAnimated:YES];
希望这有效。让我知道。
答案 1 :(得分:0)
initWithNibName不是必需的......您可以将其更改为nil。
所以,这是正确的代码(没有动画):
MapView *mapView = [[MapView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:mapView animated:NO];
尝试使用present返回查看1时,您不应该收到EXC_BAD_ACCESS。如果你无法解决它,请改为使用它:
[self dismissModalViewControllerAnimated:YES];
第二个视图控制器将消失,第一个视图控制器将再次可见。
答案 2 :(得分:0)
请注意,像这里的其他答案一样呈现模态视图控制器意味着您拥有一堆不断积累的视图控制器。使用该应用程序的时间足够长,它会崩溃。
相反,您可以从应用程序窗口中换出视图。这是一种方法:
将数据成员添加到您的应用委托以存储当前视图:
@class MyAppDelegate : NSObject <...>
{
UIViewController* currentVC;
}
并在那里添加一条消息来交换VC:
-(void)setCurrentVC:(UIViewController*)newVC
{
if (newVC==currentVC) return;
if (currentVC!=nil)
[currentVC.view removeFromSuperview];
currentVC = newVC;
if (newVC!=nil)
[self.window addSubview:newVC.view];
}
并从一个屏幕切换到另一个屏幕:
MapView* mapView = [[MapView alloc] init];
[[[UIApplication shared] delegate] setCurrentVC:mapView];