2012-12-05 73 views
4

我必須去另一個視圖 - 控制與performSegueWithIdentifier,但我還需要去除的ViewController目前我我怎麼可以這樣,我也試過,但它不工作:Dismissviewcontroller和執行賽格瑞

[self performSegueWithIdentifier:@"next" sender:self]; 
[self dismissViewControllerAnimated:NO completion:nil]; 

//tried the other way, but it doesn't work either 
[self dismissViewControllerAnimated:NO completion:nil]; 
[self performSegueWithIdentifier:@"next" sender:self]; 

它看起來像沒有任何簡單的方法來做到這一點? 我有4個viewcontrollers,它們是這樣連接的,我想從遊戲轉移到高分。

menu-->game----->gameover 
menu-->highscore 
+0

您有什麼看法佈局?你試圖解僱一個模態提供的UIViewController並執行一個segue去哪裏?還有什麼你的意思是行不通的?它會崩潰嗎?它是否默默地失敗? –

+2

最終,這聽起來很糟糕的設計,你使用模態或推塞格斯?這聽起來像你應該使用push segues,那麼你不需要擔心解僱視圖控制器。 – mkral

+0

@Gabro它說:「警告:嘗試從視圖控制器中退出,而演示或解僱正在進行!」。它執行segue,但如果我回去,視圖控制器仍然在那裏。所以它不排除。 – fuskaren

回答

5

這個怎麼樣?

UIViewController *parentController = self.presentingViewController; 
[picker dismissViewControllerAnimated:YES completion:^(void){ 
    [parentController performSegueWithIdentifier:@"next" sender:self]; 
}]; 
+0

我之前測試過,但它不起作用,因爲您可以在執行segue之前移除viewcontroller。但它需要viewcontroller執行segue,所以segue永遠不會被調用。 – fuskaren

+0

我沒有測試過它,但它仍然可以執行segue,因爲它不會被刪除。但是,如果你嘗試了它,那麼它可能是不成功的另一個原因。 – ninjaneer

+0

嗯,我現在也無法測試它,因爲我現在改變了,所以現在我使用導航控制器。但我會在下次嘗試你的答案! – fuskaren

0

,我有同樣的問題,直到我意識到我應該使用推SEGUE代替。
新VC將一次解僱他們。

1

我有同樣的問題,這是我解決如果有人來這裏尋找答案。

//In viewController that is being dismissed 
[self dismissViewControllerAnimated:NO completion:^{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"callSegue" object:self]; 
}]; 


//In viewController being presented 
//in viewDidLoad: 
[[NSNotificationCenter defaultCenter] addObserver: self 
              selector: @selector(gotoNewView) 
               name: @"callSegue" 
               object: nil]; 

-(void)gotoNewView { 
    [self performSegueWithIdentifier:@"segueToPerform" sender:self]; 
} 
0

更妙的是:

[self dismissViewControllerAnimated:NO completion:^(void) 
{ 
// Perform the segue here. 
}];