web-dev-qa-db-ja.com

ストーリーボードを使用するときにモーダルを閉じる適切な方法は何ですか?

ストーリーボードを使用して、モーダルを閉じる適切な方法は何ですか?

  • iBActionを使用して、ボタンのクリック後に閉じるコードを記述しますか?
  • セグエを使用して、ボタンをクリックした後に親View Controllerに通知しますか?
39
aryaxt

こちらをご覧ください 表示されたView Controllerの削除 約半分

提示されたView Controllerを却下するときが来るとき、望ましいアプローチは、提示したView Controllerにそれを却下させることです。

したがって、ボタンをクリックした後、IBActionを使用して、コードを記述して終了する必要があります。

24
Bill Bonar

通常、ストーリーボードでこれを行おうとすると、余分なクラスを作成しない方がよいことがわかりました。提示するView Controllerから却下を実行することは依然として理にかなっているため、クラスをサポートする必要があります。

表示するView ControllerでIBActionを作成し、適切に名前を付ける場合.

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

次に、ストーリーボードから解雇をトリガーしたい場所で、次のように最初のレスポンダーへのアクションを作成します。 IBActionsの一意の名前を作成することにより、これを拡張して複数の表示View Controllerで動作することができます。

Create an outlet to first responder

Select correct IBAction

ファーストレスポンダーとレスポンダーチェーンの詳細

12

Alex CioによるSwift 3およびXCode 8.3の回答:

クラスを作成します。

import UIKit

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

ただし、ストーリーボードでは次を選択する必要があります。

アクションセグエ->カスタム->却下

このオプションがAction Segueメニューに表示された後にのみ

11
UnRewa

私の答えをご覧ください こちら 。ストーリーボードでモーダルビューコントローラーを閉じるには、2つの方法があります。プロジェクトにクラスを追加すると、ストーリーボードのみを使用してコードなしでモーダルビューから戻ることができるため、説明した方法2が気に入っています。ただし、デリゲートとデリゲートプロトコルを実装している場合は、dismissModalViewControllerステートメントを配置するのにも適しています。

10
T.J.

UIStoryboard内でこれを行うには、最初にプロジェクトでUIStoryboardSegue型のオブジェクトを作成する必要があります

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にドラッグします。私の場合、私のクラスの名前のため、** dismiss Controller *と表示されます。

enter image description here

それを選択すれば完了です!非常に良い説明もあります このウェブサイト上

7
Alex Cio