2011-03-29 40 views
6

我有一種情況,我想打開另一個模式控制器。但是當用戶關閉時,他們應該回到兩個模式控制器的父控制器。關閉一個模式ViewController並以相同的方法打開另一個模式。可能?

所以我負責的這個父控制器。當用戶單擊第一個模態控制器上的按鈕時,父級上的方法與下面的代碼類似。

[self.navigationController dismissModalViewController:YES]; 
SecondModalViewController *c = [[SecondModalViewController alloc] init]; 
[self.navigationController presentModalViewController:c animated:YES]; 
[c release]; 

發生的唯一情況是第一個視圖關閉,但我沒有看到第二個視圖打開。是否有可能關閉一個模式ViewController並打開第二個在同一個方法?如果是這樣,怎麼樣?

回答

2

我一直做同樣的事情沒有問題,雖然我有animated:NO ...我猜你的問題是因爲你有兩個animated:YES。你究竟在尋找什麼樣的效果?你想看到一個動畫了,然後另一個動畫?如果是這樣,你需要延遲執行presentModalViewController。

否則,你應該能夠在不關閉第一個在所有提交第二模態視圖控制器。當你調用dismissModalViewController;它應該解僱這兩個。

+0

我發現罪魁禍首:解除所述第一與動畫:是是防止從開口的第二個。我試圖打開第二個而不是關閉第一個,但那對我沒有用;這可能是特定於我的情況。 – ageektrapped 2011-03-29 16:14:13

7

我覺得你的時間關閉第一個視圖控制器時,[self.navigation presentmodal ..]這麼想的具有自開自新的。

,你可以這樣做:

使用布爾變量陳述下一次是否出現該控制器(當您關閉當前你試圖打開一個),它應該關閉,並實現了功能在viewDidApper:方法,就像這樣:

@interface FirstViewController : UIViewController 
{ 
    //... 
    BOOL close; 
} 

,並在.m文件,

-(void)viewDidAppear:(BOOL)animated{ 
    if(close) 
     [self dismissModalViewControllerAnimated:NO]; 
    else 
     [super viewDidAppear:animated]; 
} 
現在

,鄰筆你的新控制器,這樣做:

-(IBAction)openSecondController:(id)sender{ 
    //.. 
    SecondViewController* controller = [[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil]; 
    close = YES; 
    [self presentModalViewController:controller animated:NO]; 
} 

現在,當你關閉第二個,第一個也將關閉。沒有任何可見的側面我的應用程序的影響..

不乾淨的方法,但我沒有找到一個更好的。 歡呼

+0

絕妙的政策! – Mehdi 2014-01-30 08:58:01

0

我發現一模一樣的響應。它看起來像標準行爲。

我周圍得到的方法是使用performSelector:withObject:afterDelay:

[self performSelector:@selector(presentController:) withObject:navController afterDelay:0.5f]; 

唯一的缺點是我必須設置一個presentController功能,然後做了presentModalViewController:動畫:

我試圖使用NSInvocation,但當我試圖爲動畫參數傳遞BOOL時,我一直在獲取錯誤的訪問錯誤。

最主要的是它的工作原理和我的客戶很高興。

相關問題