Segueのメソッドの中で別のSegueを実行する

Segueのメソッドの中で別のSegueを実行する今、趣味で情報を一覧できるアプリを作っているのだけど、モーダルで開いたリストから遷移しているのがちょっと気持ち悪くて、モーダルをしまった上でメイン画面から遷移する動作に変えようと思ったのでした。問題は全部UIStoryboardのSegueで遷移しているということです。

なので、モーダルからメインに戻るときもUnwindのSegueを使っています。UnwindのSegueのprepareでメインのビューコントローラの引数をセットして、メインのunwind segueメソッドで別のsegueを起動しようとしたのですが動きませんでした。

これはメインのunwind segueメソッドに、

[self performSelector:@selector(someSegueLaunchMethod) withObject:nil afterDelay:0.0];

こんな感じの記述を書くことで解消しました。someSegueLanuchMethod:の部分は、例えば

- (void)someSegueLaunchMethod
{
    [self performSegueWithIdentifier:@"mainToDetail" sender:self];
}

という感じで、ビューコントローラからsegueを実行します。

ちなみに、performSelector:ではアプリが落ちました。afterDelay:の部分で別メソッド化?的なことが内部的に行なわれているのかなと思ってますが詳しくは調べていません。ただ、performSelector:でだめでも~afterDelay:で行けることが多いので、この辺りちょっと調べておくといろいろ応用出来るかもしれないと思いました。

追記

2回連続で画面遷移が起こるという動作が気持ち悪いので結局別の方法で実装しました。

Pocket
LINEで送る

You may also like...