2012-06-14 44 views
17

我正在使用iOS 5 SDK創建應用程序。我設法使用Storyboard的Segues推送視圖,但我找不到正確的方式來彈出當前視圖並返回到前一個視圖。使用iOS 5上的Segues/Storyboard彈出當前視圖

我沒有使用任何導航控制器(應用程序沒有任何頂部或底部酒吧)。

我不認爲使用模式或推塞格另一種方式將是解決方案,因爲它實例化一個新的控制器。

我是否必須使用自定義Segue與相反的動畫和最後刪除視圖?或者,還有更好的方法 ?

回答

24

您可以嘗試從您要關閉的控制器(無論控制器是否已被按下或以模態方式顯示)呼叫[self dismissViewControllerAnimated:YES completion:nil];

下面是相關文檔:UIViewController Class Reference

所述呈現視圖控制器負責貶呈現的視圖控制器。如果您在呈現的視圖控制器本身上調用此方法,它會自動將該消息轉發給呈現視圖控制器。

+0

正是我需要的,謝謝。 – Jukurrpa

+16

注意:這不會工作w /導航控制器(彈出)。 –

+0

好極了;)。你讓我今天一整天都感覺很好 :)。謝謝 – androniennn

53

iOS 5中的故事板不提供「無代碼」的方式從segue返回 - 這是您需要實現的東西。

如果您使用「push」segues(需要導航控制器),請使用導航控制器的popViewControllerAnimated:方法撤銷上次推送segue。 (或其他方法來撤消多;見UINavigationController文檔)。

如果使用「莫代爾」塞格斯,叫dismissViewControllerAnimated:completion:其中介紹了當前視圖控制器的視圖控制器(你可以從它的presentingViewController財產得到)上。


更新:在iOS 6中,後來有在故事板要「背」開卷塞格斯。它仍然不是一個無代碼的解決方案 - 它不應該,因爲你需要能夠做一些事情,比如區分「完成」和「取消」從模態視圖控制器退出。但它確實可以讓你將更多的應用程序的語義流程放入故事板。蘋果有tech note that describes them in detail,他們也覆蓋在the video from WWDC 2012 Session 407

16

只是爲了澄清。

在被推送的類中。只需連線以下,控制器和視圖就會彈出。

[self.navigationController popViewControllerAnimated:YES]; 
3

在你的滑鼠板上創建Segue類型「自定義」。這可以來自一個按鈕。 創建一個名爲「popSegue」的新UIStoryboardSegue類 在popSegue.m文件中添加以下內容;

-(void)perform{ 
    UIViewController *sourceViewContreoller = [self sourceViewController]; 
    [sourceViewContreoller.navigationController popViewControllerAnimated:YES]; 
} 

- 在故事板編輯器中。

- 選擇的SEGUE和改變Segue公司類爲 「popSegue」

- 設置標識符爲 「popSegue」

完成!

您可以在整個項目中使用相同的「popSegue」類。

希望這有助於

2

我也使用Xcode 5,這裏是它是如何完成的。首先,在視圖代碼文件推對方,創建.h文件的IBAction爲方法,像這樣:

- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender; 

Then in the .m file add this: 

- (IBAction)exitToHere:(UIStoryboardPopoverSegue *)segue sender:(id)sender { 

} 

您可以添加你想在這個方法執行任何清理代碼。接下來轉到故事板並選擇推送的視圖。我假設你在視圖上有一些按鈕,用戶可以點擊顯示他已完成。點擊該按鈕,按住該鍵並拖動到作爲「退出」的視圖下方的綠色框中。鬆開鼠標鍵,但繼續按住鍵。將出現一個彈出窗口,您的方法將顯示在列表中。選擇該方法。現在,當用戶點擊按鈕時,視圖將彈出,您將返回到開始方法。