2013-02-19 90 views
3

在我的應用程序啓動時,它以編程方式顯示使用segue的LoginViewController。視圖控制器以模態方式呈現,設置爲交叉解散。成功驗證後,我想通過以編程方式觸發unwind segue來關閉登錄視圖。所以我說這我的頭文件:iOS 6 - 以編程方式觸發Unwind Segue什麼都不做

- (IBAction)unwindSegue:(UIStoryboardSegue *)segue; 

現在在IB我能夠控制拖動從「文件的所有者」 LoginViewController的退出按鈕,並選擇unwindSegue:。這會創建一個手動循環,它會正確顯示在文件所有者和退出按鈕的Connections檢查器中。然後,我從IB中的場景中單擊新創建的Unwind segue,然後爲其命名。如果我點擊「去」按鈕來取消放風行爲,它會將我帶到上述聲明中。

到目前爲止好,我再觸發,認證成功後該開卷賽格瑞在我的GCD塊:

.... 
dispatch_async(dispatch_get_main_queue(),^
{ 
    [self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]; 

    [self.spinner removeFromSuperview]; 
    self.spinner = nil; 
}); 

.....並在運行時沒有任何反應。微調器確實被正確移除,但沒有任何放鬆繼續執行的跡象。

unwindSegue:執行中的一個斷點從未被擊中。沒有錯誤拋出。沒有任何東西寫入控制檯。標識符是正確的,我三重檢查(否則它會失敗)。

我看了答案hereherehere但我似乎沒有錯過任何東西。

我也注意到什麼雖然是Xcode認爲unwindSegue:鏈接: linked? not linked?

我無法從在unwindSegue:前的小空圈拖動並將其鏈接到的退出按鈕。

任何幫助將不勝感激。

+0

你爲什麼不乾脆讓退出按鈕觸發SEGUE,即線直接按鈕? – Matthias 2013-02-19 13:51:40

+0

感謝您的回覆,但我想我可能沒有在那裏清楚表達自己的意見......我一直在談論的退出按鈕是綠色的退出按鈕,而不是視圖上的實際按鈕 – 2013-02-19 22:03:25

+0

究竟應該觸發您的退休繼續?爲什麼你需要以異步的方式來完成,比如你爲什麼要使用GCD? – Matthias 2013-02-20 07:36:59

回答

8

如果您使用的是模態SEGUE去你的登錄視圖,所有你需要回去被調用

[self dismissViewControllerAnimated:YES completion:nil]; 

更準確地說,你應該在呈現控制器調用它(你的第一個控制器) ,但是如果您在提供的控制器處致電,它將被轉發。你可以使用完成塊做任何必要的清理。沒有必要使用GCD。

編輯

要回答的附加註釋:我不是從你的描述很確定,但似乎你已經實現了在開卷行動提出控制器而不是在呈現控制器。放鬆段是爲了允許在呼叫者處做某些事情(例如,設置數據)而無需附加協議。

+1

謝謝。我明白我可以調用'dismissViewControllerAnimated:completion:',但是我更加好奇爲什麼unwind segue不起作用。我剛剛將它連接到一個按鈕,但它仍然無法正常工作。此外,使用GCD的目的是使認證Web服務調用不會阻塞UI,而不僅僅是關閉登錄視圖控制器。 – 2013-02-20 10:01:11

+0

@AllenZeng:看我的編輯。 – Matthias 2013-02-20 11:18:48

+0

你是完全正確的!我沒有在正確的地方實施賽格......我應該早一點看到......謝謝! – 2013-02-20 12:55:01

2

引用來自蘋果技術說明文件中有關Unwind Segue的文本: 要添加一個將僅以編程方式觸發的展開順序,請從場景的視圖控制器圖標控制+拖動到其退出圖標,然後選擇新展開的展開操作從彈出菜單。

Link to the Technical Note