絵コンテを使うとこれはとても簡単です。アクションを「終了」までドラッグするだけです。しかし、どのように私は私のコードからそれを呼び出すべきですか?
巻き戻すSegueの名前を挿入します。
次に、あなたのセグエと一緒に- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
を識別します。
これがObjective CとSwiftの完全な答えです。
1)移動先のView Controller(移動先)にIBAction
アンワインドセグエを作成します。実装ファイルのどこでも。
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2)ソースビューコントローラ(探しているコントローラ)で、Name +「アクティビティ名」からドラッグして終了します。ポップアップのステップ1で作成されたアンワインドセグエが表示されます。 (見えない場合は、ステップ1を確認してください)。ポップアップからunwindToContainerVC:を選択するか、ソースコントローラをアンワインドIBActionに接続するためのメソッドに名前を付けたものを選択します。
3)ストーリーボードのソースView Controllerのドキュメントアウトラインでセグエを選択し(下部に表示されます)、識別子を付けます。
4)ソースビューコントローラからこのメソッドを使用して、アンワインドセグエを呼び出し、アンワインドセグエ名を代入します。
//目標C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
//迅速
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB。ソースコントローラの公開プロパティにアクセスするには、unwindメソッドのsegueパラメータのsourceViewControllerプロパティを使用します。また、フレームワークはソースコントローラの削除を処理します。これを確認したい場合は、killされたら起動するはずのログメッセージと共にdeallocメソッドをソースコントローラに追加してください。 deallocが起動しない場合は、保持サイクルがあるかもしれません。
bradleygriffith
の答えは素晴らしかったです。私はステップ10を取り、単純化のためにスクリーンショットを作りました。これはXcode 6のスクリーンショットです。
オレンジ色のアイコンから赤い終了アイコンまでControlキーを押しながらドラッグすると、ビュー内にアクションやボタンが表示されずに巻き戻しができます。
次にunwind segue
を選択し、コードからアクセスするための識別子を設定します。
コードでは、
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
私は呼び出したViewController
に戻る[self dismissViewControllerAnimated: YES completion: nil];
を使いました。
アンワインドセグに関するアップルのテクニカルノートからのテキストの引用:プログラムによってのみ起動されるアンワインドセグを追加するには、シーンのView Controllerアイコンからその終了アイコンまでcontrol +ドラッグして、ポップアップメニューから新しいセグエのアンワインドアクションを選択します。
上記のVishal Chaudhryの答えは私のために働きました。私はまた、手動で隔離を起動するためにそれを追加します:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
viewController内から、ストーリーボードのViewControllerのシーンおよびRHSのプロパティビューで、アンワインドセグエを選択する必要があります。Identifierフィールドに、コード内で参照している名前が含まれていることを確認します(上の例では "mySegueName")。 ).
この手順を省略すると、上の行では、ファイル名が不明であるという例外がスローされます。
興味がある人のために、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;
}
}
}
VCでどうやってこれをするのか疑問に思っている人のためにストーリーボードでは設定できない( "プログラム的に" + "アンワインドセグエ"からこの質問に来る人)。
プログラムでアンワインドセグエを設定することはできないことを考えると、最も単純な唯一のプログラムによる解決策は次のように呼び出すことです。
navigationController?.popToRootViewController(animated: true)
これにより、スタック上のすべてのView ControllerがルートView Controllerに戻されます。
Swift 4:
1。コントローラー内にsegueを入れて@ IBActionを作成すると、以下のようにリラックスできます。
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2。ストーリーボードで、Ctrlキーを押しながら終了するにはCtrlキーを押しながらドラッグして先ほど作成した方法を選択します。
。ドキュメントのアウトラインに "Unwind segue ...."というタイトルの新しい行があることに気付くでしょう。この行をクリックして属性インスペクタを開き、識別子を設定します(私の場合はnwindSegueIdentifier)。
4。あなたはもう終わりです!今、あなたはあなたがほしいと思うView Controllerを開いて、segueを実行するいくつかのメソッドを作成する必要があります。例えば、ボタンを追加して、@ IBActionというコードでそれを接続することができます。その後、この中でIBAction add perfromSegue(withIdentifier:sender:) method :
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
それであなたがしなければならないことはそれだけです!
FYI:@ Vadimの答えがView Controller内から呼び出される手動の巻き戻し隔離アクションで機能するには、次のコマンドを配置する必要があります。
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
オーバーライドされたクラスメソッドの内部viewDidAppearのように:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
viewDidLoadやviewWillAppearのような他のViewControllerメソッドに入れても無視されます。