ストーリーボードを使用すると、これは非常に簡単です。アクションを「終了」にドラッグするだけです。しかし、コードからどのように呼び出す必要がありますか?
10 に答える
- 手動セグエを作成し(ctrlファイルの所有者から終了するまで-ドラッグ)、
- 緑色の[終了]ボタンの下にある左側のコントローラメニューで選択します。
セグエの名前を挿入して巻き戻します。
次に、- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
あなたのセグエで識別します。
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が起動しない場合は、保持サイクルがある可能性があります。
bradleygriffith
の答えは素晴らしかった。手順10を実行し、簡略化のためにスクリーンショットを作成しました。これはXcode6のスクリーンショットです。
- Controlキーを押しながらオレンジ色のアイコンから赤い終了アイコンにドラッグして、ビューにアクションやボタンを表示せずに巻き戻しを作成します。
- 次に
unwind segue
、サイドバーでを選択します。
- SegueIdentifier文字列を設定します。
- コードからその識別子にアクセスします。
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
私[self dismissViewControllerAnimated: YES completion: nil];
はあなたを呼び出しに戻すものを使用しましたViewController
。
巻き戻しセグエに関するAppleのテクニカルノートからの引用:プログラムでのみトリガーされる巻き戻しセグエを追加するには、シーンのビューコントローラアイコンから終了アイコンにcontrolキーを押しながらドラッグし、ポップアップメニューから新しいセグエの巻き戻しアクションを選択します。
上記のVishalChaudhryの答えは私のために働いた。また、以下を使用して手動でシーケンスをトリガーするために、これを追加します。
[self performSegueWithIdentifier:@"mySegueName" sender:self];
ViewController内から、ストーリーボードのViewControllerのシーンの下でアンワインドセグエを選択する必要があります。RHSのプロパティビューで、Indentifierフィールドに、コードで参照している名前(上記の例では「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;
}
}
}
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)
}
だからあなたがしなければならないのはそれだけです!
Swift 4.2、Xcode 10+
ストーリーボードを介して設定されていないVCでこれを行う方法を疑問に思っている人(「プログラムで」+「アンワインドセグエ」を検索してこの質問に来た人)。
プログラムでアンワインドセグエを設定できないことを考えると、最も単純なプログラムによる解決策は、次のように呼び出すことです。
navigationController?.popToRootViewController(animated: true)
これにより、スタック上のすべてのViewControllerがルートViewControllerにポップバックされます。
ナビゲーションスタックから最上位のViewControllerだけをポップするには、次を使用します。
navigationController?.popViewController(animated: true)
参考:@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メソッドに配置すると、無視されます。