2011-11-19 41 views
12

我正在設計一個使用XCode 4.2的故事板功能的iOS應用程序。該應用程序有一個登錄屏幕,該屏幕需要用戶名和密碼,並有一個登錄按鈕。按下登錄按鈕會觸發推送到另一個視圖控制器。但是,我希望seque在進入下一個視圖控制器之前等待登錄返回成功。iOS:使segue等待登錄成功

我知道關於prepareForSegue:sender:,但繼承人我的問題:登錄調用是異步的。因此我不能在那裏執行登錄。

圍繞這個有什麼特點嗎?我是否可以在故​​事板中創建一個只在需要時觸發的seque(與單擊按鈕時相反)?

回答

37

好吧,我已經想通了。我已經定義了從UIButton到下一個UIViewController的繼續。按照這種方式定義,沒有辦法有條件地執行segue。

代替將按鈕放在按鈕上,我做了從第一個UIViewController到另一個UIViewController的繼續。這定義了賽格,但沒有將它與行爲聯繫起來。從那裏我可以簡單地打電話performSegueWithIdentifier:sender:當我想執行segue(在我的情況是異步任務完成時)。

這對我的主要優勢是IB保持其結構。

非常感謝@cli_hlt讓我指向正確的方向(+1)。

5

我不知道是否有在IB的方式來執行這樣的操作(雖然我強烈懷疑這一點),所以我建議視圖控制器上使用

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

當你異步登錄成功的信號。

+0

是的,我看到了,我只是希望能有辦法做到這一點,我不必在IB中打破流程。 – mtmurdock

1

您也可以在UIStoryBoard的實例上調用instantiateViewControllerWithIdentifier。這將返回一個視圖控制器引用到故事板中的任何點。從那裏,你可以展示它,不管你喜歡什麼,它會收集故事板的流程。

+0

雖然不會出現在IB中。我試圖在故事板上保留流程圖。你所建議的不會顯示IB中兩個控制器之間的聯繫。如果你閱讀我的答案,你會看到我在使用IB定義segue時如何能夠做到基本上與你提議的相同的事情。感謝您的輸入! +1 – mtmurdock