320

ストーリーボードを使用すると、これは非常に簡単です。アクションを「終了」にドラッグするだけです。しかし、コードからどのように呼び出す必要がありますか?

4

10 に答える 10

293
  1. 手動セグエを作成し(ctrlファイルの所有者から終了するまで-ドラッグ)、
  2. 緑色の[終了]ボタンの下にある左側のコントローラメニューで選択します。

緑の[終了]ボタンの下にある左側のコントローラメニューで選択します

セグエの名前を挿入して巻き戻します。

次に、- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.あなたのセグエで識別します。

于 2012-11-03T11:49:35.217 に答える
177

ObjectiveCとSwiftの完全な答えは次のとおりです。

1)IBActionデスティネーションビューコントローラー(セグエする場所)でアンワインドセグエを作成します。実装ファイルのどこでも。

// Objective C

    - (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {

    }

// Swift

 @IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {

    }

2)ソースビューコントローラー(セグエしているコントローラー)で、⌃+[アクティビティの名前]からドラッグして終了します。手順1で作成したアンワインドセグエがポップアップに表示されます。(表示されない場合は、手順1を確認してください)。ポップアップからunwindToContainerVC:を選択するか、ソースコントローラーをアンワインドIBActionに接続するためにメソッドに名前を付けたものを選択します。

ここに画像の説明を入力してください

3)ソースビューコントローラのストーリーボードのドキュメントアウトライン(下部に表示されます)でセグエを選択し、識別子を付けます。

ここに画像の説明を入力してください

4)ソースビューコントローラからこのメソッドを使用してアンワインドセグエを呼び出し、アンワインドセグエ名に置き換えます。

// Objective C

[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];

// Swift

self.performSegueWithIdentifier("unwindToContainerVC", sender: self)

NB。unwindメソッドのsegueパラメーターのsourceViewControllerプロパティを使用して、ソースコントローラーの公開されたプロパティにアクセスします。また、フレームワークがソースコントローラーの却下を処理することに注意してください。これを確認したい場合は、ソースコントローラーにdeallocメソッドを追加し、ログメッセージを追加して、強制終了すると起動するようにします。Deallocが起動しない場合は、保持サイクルがある可能性があります。

于 2014-12-13T20:27:36.907 に答える
89

bradleygriffithの答えは素晴らしかった。手順10を実行し、簡略化のためにスクリーンショットを作成しました。これはXcode6のスクリーンショットです。

  1. Controlキーを押しながらオレンジ色のアイコンから赤い終了アイコンにドラッグして、ビューにアクションやボタンを表示せずに巻き戻しを作成します。

ここに画像の説明を入力してください

  1. 次にunwind segue、サイドバーでを選択します。

ここに画像の説明を入力してください

  1. SegueIdentifier文字列を設定します。

ここに画像の説明を入力してください

  1. コードからその識別子にアクセスします。
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
于 2014-08-06T20:56:34.210 に答える
14

[self dismissViewControllerAnimated: YES completion: nil];はあなたを呼び出しに戻すものを使用しましたViewController

于 2012-11-04T23:02:28.030 に答える
11

巻き戻しセグエに関するAppleのテクニカルノートからの引用:プログラムでのみトリガーされる巻き戻しセグエを追加するには、シーンのビューコントローラアイコンから終了アイコンにcontrolキーを押しながらドラッグし、ポップアップメニューから新しいセグエの巻き戻しアクションを選択します。

テクニカルノートへのリンク

于 2013-11-06T19:21:11.370 に答える
6

上記のVishalChaudhryの答えは私のために働いた。また、以下を使用して手動でシーケンスをトリガーするために、これを追加します。

[self performSegueWithIdentifier:@"mySegueName" sender:self];

ViewController内から、ストーリーボードのViewControllerのシーンの下でアンワインドセグエを選択する必要があります。RHSのプロパティビューで、Indentifierフィールドに、コードで参照している名前(上記の例では「mySegueName」)が含まれていることを確認します。 )。

この手順を省略すると、上の行で、シーケンス名が不明であるという例外がスローされます。

于 2014-03-18T22:39:48.550 に答える
3

興味のある方のために、ios6より前のバージョンで機能する下位互換性のあるソリューション:

- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {

    for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
        UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
        if ([vc isKindOfClass:vcClass]) {
            [self.navigationController popToViewController:vc animated:animated];
            return;
        }
    }
}
于 2013-12-23T22:32:52.410 に答える
3

SWIFT 4

1.巻き戻したいコントローラー内にsegueを使用して@IBActionを作成します。

    @IBAction func unwindToVC(segue: UIStoryboardSegue) {

    }

2.ストーリーボードで、ctrl +ドラッグから誘導灯にセグエ(アンワインド)して誘導灯を終了し、前に作成した方法を選択します。

ここに画像の説明を入力してください

3.これで、ドキュメントのアウトラインに「Unwindsegue....」というタイトルの新しい行があることがわかります。次に、この行をクリックして属性インスペクターを開き、識別子を設定する必要があります(私の場合はunwindSegueIdentifier)。

ここに画像の説明を入力してください

4.ほぼ完了です。次に、巻き戻したいView Controllerを開き、セグエを実行するメソッドを作成する必要があります。たとえば、ボタンを追加し、@ IBActionを使用してコードに接続しその後、このIBAction内にperfromSegue(withIdentifier:sender:)メソッドを追加できます。

     @IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
         performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
     }

だからあなたがしなければならないのはそれだけです!

于 2018-09-10T09:44:07.877 に答える
3

Swift 4.2、Xcode 10+

ストーリーボードを介して設定されていないVCでこれを行う方法を疑問に思っている人(「プログラムで」+「アンワインドセグエ」を検索してこの質問に来た人)。

プログラムでアンワインドセグエを設定できないことを考えると、最も単純なプログラムによる解決策は、次のように呼び出すことです。

navigationController?.popToRootViewController(animated: true)

これにより、スタック上のすべてのViewControllerがルートViewControllerにポップバックされます。


ナビゲーションスタックから最上位のViewControllerだけをポップするには、次を使用します。

navigationController?.popViewController(animated: true)

于 2019-04-02T11:48:42.723 に答える
0

参考:@Vadimの回答が、View Controller内から呼​​び出された手動のアンワインドシーケンスアクションで機能するためには、次のコマンドを配置する必要があります。

[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];

オーバーライドされたクラスメソッドviewDidAppearの内部は次のようになります。

-(void) viewDidAppear:(BOOL) animated
{
    [super viewDidAppear: animated];

    [self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}

viewDidLoadviewWillAppearなどの他のViewControllerメソッドに配置すると、無視されます。

于 2013-04-19T20:13:34.687 に答える