2012-08-17 65 views
0

事情的方法是:我有帶有觸發像這樣的IBAction爲一個按鈕modalViewController該駁回一個`modalViewController`並呈現另一

-(IBAction)myMethod 
{ 
    [self dismissModalViewControllerAnimated:YES]; 

    if([delegate respondsToSelector:@selector(presentOtherModalView)]) 
    { 
     [delegate presentOtherModalView]; 
    } 
} 

在根認爲是用於該委託modalViewController我已經實現了presentOtherModalView委託方法,它看起來像這樣:

-(void)presentOtherModalView 
{ 

    AnotherViewController *viewInstance = [[AnotherViewController alloc]initWithNibName:@"AnotherViewController" bundle:nil]; 

    viewInstance.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

    [self presentModalViewController:viewInstance animated:YES]; 

    [viewInstance release]; 
} 

的問題是沒有被呈現的第二個modalViewController。它給我留言wait_fences: failed to receive reply: 10004003 ......這應該怎麼辦?

回答

1

因爲它們恰好在彼此之後執行實現它(他們不會等待視圖消失/出現),它不會被執行。由於屏幕上一次只能有一個ModalViewController,因此您必須先等待另一個ModalViewController在屏幕上顯示下一個之前消失。

您可以創造性你想怎麼做,但我做的方式是這樣的:

[self dismissModalViewControllerAnimated:YES]; 
self.isModalViewControllerNeeded = YES; 

然後在底層的ViewController,在viewDidAppear方法,我這樣做:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    if (self.isModalViewControllerNeeded) { 
     [self presentModalViewController:viewInstance animated:YES]; 
     self.isModalViewControllerNeeded = NO; 
    } 
} 

希望它有幫助!

+0

什麼是''isModalViewControllerNeeded? – 2012-08-17 13:06:39

+0

只是一個BOOL屬性的例子。你可以自己做。 – Thermometer 2012-08-17 13:09:41

1

這是因爲dismissModalViewControllerAnimated需要一些時間來消除動畫,並且您打電話給另一個視圖以在解除第一個模態視圖之前以模態視圖呈現,因此呈現模態視圖調用被拒絕。完全解散後,如果您不在視圖中,則不應執行動畫,只有您可以調用其他視圖。爲了解決使用時間間隔該問題呼叫2或3秒後的本模態的視圖或使用完成塊dismissModalViewControllerAnimated

可以通過使用本

[delegate performSelector:@selector(presentOtherModalView) withObject:nil afterDelay:3]; 
+0

我怎樣才能使用時間間隔? – 2012-08-17 12:56:18

+0

檢查我的更新回答 – Sumanth 2012-08-17 13:00:50

+0

它給了我方法'performSelector:withObject afterDelay''找不到的警告' – 2012-08-17 13:05:17

相關問題