2011-09-24 67 views
0

我有一个基于视图的应用程序,带有三个xib文件,每个文件都有自己的视图控制器。我如何从一个变为另一个?我使用它从xib 1移动到xib 2,但是当我使用相同的代码从xib 2移动到xib 1时,我在[self presentModal ....]行上得到了EXC_BAD_ACCESS。在XIB之间移动iOS

MapView *controller = [[MapView alloc] initWithNibName:@"MapView" bundle:nil]; 

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

[self presentModalViewController:controller animated:YES]; 

我该如何自由地从一个xib移动到另一个xib?

回答

2

我认为你正在尝试做的是呈现模态视图,然后解雇它,对吧?如果是这样的话,那么你把下面的代码在您使用驳回它的方法(例如 - (IBAction为)dissmissModalView)

[self.parentViewController dismissModalViewControllerAnimated:YES]; 

希望工程。让我知道。

+0

如果我说我爱你会足够吗?正是我所需要的,无法相信我从未见过它。非常感谢! –

+1

如果这回答了您的问题,请确保通过检查它是否正确。 –

0

initWithNibName并不是真的有必要......你可以改变它为零。

所以,这里是正确的代码(不包括动画):

MapView *mapView = [[MapView alloc] initWithNibName:nil bundle:nil]; 
[self presentModalViewController:mapView animated:NO]; 

试图返回查看1使用时存在的不应该接受EXC_BAD_ACCESS。如果你能不能解决,只是用这个来代替:

[self dismissModalViewControllerAnimated:YES]; 

第二个视图控制器将消失,第一个视图控制器会再次出现。

0

请注意,呈现模态视图控制器就像其他答案一样,这意味着你有一个不断积累的视图控制器堆栈。使用应用程序足够长的时间,它会崩溃。

取而代之,您可以从应用程序窗口换出视图。下面是这样做的一种方式:

数据成员添加到应用程序委托保存当前视图:

@class MyAppDelegate : NSObject <...> 
{ 
    UIViewController* currentVC; 
} 

,并添加一个消息,有交换虚电路:

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