ストーリーボードを使用すると、これは非常に簡単です。アクションを「終了」にドラッグするだけです。しかし、コードからどのように呼び出す必要がありますか?
ストーリーボードを使用すると、これは非常に簡単です。アクションを「終了」にドラッグするだけです。しかし、コードからどのように呼び出す必要がありますか?
回答:
セグエの名前を挿入しておくつろぎください。
次に、- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
あなたのセグエを識別します。
Objective CとSwiftの完全な答えは次のとおりです。
1)IBAction
目的のビューコントローラ(セグエしたい場所)で巻き戻しセグエを作成します。実装ファイル内の任意の場所。
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2)ソースビューコントローラー(セグメンテーション元のコントローラー)で、⌃ +「アクティビティ名」からドラッグして終了します。ポップアップのステップ1で作成されたアンワインドセグエが表示されます。(表示されない場合は、手順1を確認してください)。ポップアップからunwindToContainerVC:を選択するか、ソースコントローラをunwind IBActionに接続するためにメソッドに名前を付けたものを選択します。
3)ストーリーボードのソースビューコントローラーのドキュメントアウトライン(下部に表示されます)でセグエを選択し、識別子を付けます。
4)ソースビューコントローラからこのメソッドを使用してアンワインドセグエを呼び出し、アンワインドセグエ名を置き換えます。
//目的C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
//スイフト
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB。unwindメソッドのsegueパラメータのsourceViewControllerプロパティを使用して、ソースコントローラの公開されたプロパティにアクセスします。また、フレームワークがソースコントローラーの非表示を処理することにも注意してください。これを確認したい場合は、ソースコントローラーにdeallocメソッドを追加します。これは、強制終了されたときに発生するログメッセージを含んでいます。deallocが起動しない場合は、保持サイクルがある可能性があります。
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
fromからViewController
to を示すあなたの写真Exit
は非常に役に立ちました。ありがとう!
bradleygriffith
の答えは素晴らしかった。ステップ10を実行し、簡単にするためにスクリーンショットを作成しました。これはXcode 6のスクリーンショットです。
unwind segue
、サイドバーでを選択します。[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
。その後、ソリューションは機能します
アンワインドセグエに関するAppleのテクニカルノートからのテキストの引用:プログラム的にのみトリガーされるアンワインドセグエを追加するには、シーンのビューコントローラーアイコンからその終了アイコンにコントロール+ドラッグし、ポップアップメニューから新しいセグエのアンワインドアクションを選択します。
上記のVishal Chaudhryの答えは私にとってうまくいきました。また、次を使用してシークを手動でトリガーするためにも追加します。
[self performSegueWithIdentifier:@"mySegueName" sender:self];
ViewController内から、ストーリーボードのViewControllerのシーンの下にあるアンワインドセグエを選択する必要があります。また、RHSのプロパティビューで、コードで参照している名前付け子(上記の例では「mySegueName」)がIndentifierフィールドに含まれていることを確認する必要があります。 )。
このステップを省略した場合、上記の行は、シーク名が不明であるという例外をスローします。
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.巻き戻したいコントローラー内にセグエ付きの@IBActionを作成します。
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2.ストーリーボードで、ctrlキーを押しながらセグエ(巻き戻し)するコントローラーから、コントローラーサインからドラッグして終了サインに移動し、先ほど作成したメソッドを選択します。
3.これで、ドキュメントのアウトラインに「Unwind segue ....」というタイトルの新しい行があることがわかります。次に、この行をクリックし、属性インスペクターを開いて識別子を設定する必要があります(私の場合はunwindSegueIdentifier)。
4.あと少しで完了です。次に、巻き戻したいビューコントローラを開き、セグエを実行するメソッドを作成する必要があります。たとえば、ボタンを追加し、@ IBActionを使用してコードに接続します。その後、このIBAction内でperfromSegue(withIdentifier:sender :)メソッドを追加します。
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
だから、あなたがしなければならないのはそれだけです!
ストーリーボードを介して設定されていない VCでこれを行う方法を疑問に思う方(「プログラムで」+「セグエをほどく」でこの質問に来る人)。
アンワインドセグエをプログラムで設定できないことを考えると、プログラムによる最も簡単な解決策は、次の呼び出しです。
navigationController?.popToRootViewController(animated: true)
これにより、スタック上のすべてのビューコントローラーがルートビューコントローラーにポップバックされます。
ナビゲーションスタックから最上位のビューコントローラーのみをポップするには、次を使用します。
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メソッドに配置した場合、無視されます。
performSegueWithIdentfier
はまさにそれを行います:1つのViewControllerから別のViewControllerへのセグエの実行