在XIB之间移动iOS
问题描述:
我有一个基于视图的应用程序,带有三个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?
答
我认为你正在尝试做的是呈现模态视图,然后解雇它,对吧?如果是这样的话,那么你把下面的代码在您使用驳回它的方法(例如 - (IBAction为)dissmissModalView)
[self.parentViewController dismissModalViewControllerAnimated:YES];
希望工程。让我知道。
答
initWithNibName并不是真的有必要......你可以改变它为零。
所以,这里是正确的代码(不包括动画):
MapView *mapView = [[MapView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:mapView animated:NO];
试图返回查看1使用时存在的不应该接受EXC_BAD_ACCESS。如果你能不能解决,只是用这个来代替:
[self dismissModalViewControllerAnimated:YES];
第二个视图控制器将消失,第一个视图控制器会再次出现。
答
请注意,呈现模态视图控制器就像其他答案一样,这意味着你有一个不断积累的视图控制器堆栈。使用应用程序足够长的时间,它会崩溃。
取而代之,您可以从应用程序窗口换出视图。下面是这样做的一种方式:
数据成员添加到应用程序委托保存当前视图:
@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];
如果我说我爱你会足够吗?正是我所需要的,无法相信我从未见过它。非常感谢! –
如果这回答了您的问题,请确保通过检查它是否正确。 –