2012-02-21 174 views
37

使用故事板什麼是解除模態的正確方法?ios故事板 - 關閉模式?

  • 使用IBAction和書寫代碼解僱後點擊按鈕?
  • 使用segue並在點擊按鈕後通知父視圖控制器?

回答

20

在這裏看到Dismissing a Presented View Controller大約一半向下

當談到時間以關閉一個呈現視圖控制器,優選的做法是讓所述呈現視圖控制器關閉它。

所以,你應該使用一個IBAction爲和編寫代碼按鈕後駁回點擊

+4

的「所以,你應該使用一個IBAction爲和編寫代碼按鈕後解僱點擊」其實是錯誤的。蘋果在說什麼是「你需要通知PARENT視圖控制器,然後解除模式。」 – 2015-06-15 00:26:07

+4

現在鏈接被破壞 – po5i 2016-06-23 15:56:59

+0

我做了一個分類:) https://github.com/evanstoddard/UIViewController-Dismiss-Actions – 2016-07-08 00:11:32

10

見我的回答here。它給你兩種方式來解除故事板中的模態視圖控制器。我喜歡方法二,因爲你在項目中添加類,你可以使用單獨的故事板來完成無模式代碼的返回。也就是說,如果你已經實現了一個委託和委託協議,它也是放置dismissModalViewController語句的好地方。

9

我發現通常當我試圖在故事板中這樣做時,我寧願不創建額外的類。從呈現視圖控制器執行解除操作仍然有意義,所以需要一個類來支持它。

如果您在呈現視圖控制器中創建了一個IBAction並將其命名爲例如

- (IBAction)dismissAnyModel:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

然後從故事板,無論你想觸發從您創建一個動作的第一個響應者,如下圖所示解僱。您可以通過爲IBActions創建唯一名稱來擴展此功能,以便與多個呈現視圖控制器一起工作。

Create an outlet to first responder

Select correct IBAction

More information on first responder and the responder chain

0

如蘋果在線文檔指示,所述呈現視圖控制器負責駁回模態(呈現)圖。

有一個崗位和例子可供 here

+3

鏈接已過時。這就是爲什麼你不應該先發布一些示例代碼來發布鏈接的答案。 – GeneCode 2016-10-10 04:26:26

3

要做到這一點,你需要首先在你的項目中創建的類型UIStoryboardSegue的對象的UIStoryboard

Creating a new class of type <code>UIStoryboardSegue</code>

內。然後插入下面的方法班上。這裏是我的類

@implementation DismissController

- (void)perform{ 

    UIViewController *sourceVC = self.sourceViewController; 
    [sourceVC.presentingViewController dismissViewControllerAnimated:YES 
                  completion:nil]; 
} 

現在你可以使用它你UIStoryboard內。選擇應使UIViewController消失的按鈕並將其拖動到您想要去的UIViewController。在我的情況下,它顯示**因爲我的班級的名稱而忽略控制器*。

enter image description here

選擇它,就大功告成了! 還有一個很好的解釋on this website.

+1

woow,謝謝你的! – 2017-12-11 19:50:20

+0

@LeoCavalcante歡迎您! :) – 2017-12-11 19:50:57

3

據亞歷克斯CIO答案Swift 3XCode 8.3

創建類:

import UIKit 

class DismissSegue: UIStoryboardSegue { 
    override func perform() { 
     self.source.presentingViewController?.dismiss(animated: true, completion: nil) 
    } 
} 

但在故事板,你應該選擇:

行動Segue - > Custom - >解僱

只有在這個選項出現Action Segue菜單