2011-09-24 72 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];