2017-08-21 1 views
4

私は正しいviewcontroller/segue構造体を私のプロジェクトのために見つけようとしています。 「B」ですが、「」から提示されますインスタントセグ、ビューを表示する前

文が真であるかどうかをチェックします。真の場合にのみ、 'B'の代わりに 'C'を即時提示する必要があります。ユーザーは「D」に続き、「D」から、「B」に戻ることがあります。

Segue Example

私は「B」のviewDidAppear()にif文をチェックすることができますが、ビューは最初のViewControllerをロードする前に、数ミリ秒のためにロードする「C」。それはいい見えません。

私はviewDidLoad()にif文を作成しようとすると、私はエラーを取得:

は、ビューウィンドウ階層に

ない「 B」オン「 C」を提示しようとすると、

おそらく、この問題についてもっと良い方法がありますか?

+0

なぜなら、ユーザポップがカスタムトランジションアニメーションを使用するとき、 'A'から' C'を表示しようとしないでください。ユーザーの知識なしに複数のView ControllerをプッシュするとAppleが拒否することがあります。 – user3589771

+3

これは非常に珍しいユーザーエクスペリエンスを与えるでしょう、あなたはより一般的なモデルに入るために全体を再設計できませんでしたか? –

+0

私はある種の曖昧なチェックがあると思います: "文が真であるかどうかをチェックします。真の場合にのみ、 'B'の代わりに 'C'をすぐに表示する必要があります。 「B」か「C」のどちらを提示すべきかを決定する –

答えて

0

segueを使用することはできません。それぞれのViewControllerを実際に表示する必要はありません。 Seguesは、ViewControllerが実際に提示された後にのみ呼び出されます。たとえば、viewDidLoadからセグをすることはできません。あなたは「フルパス」を取るその一つに牽引異なるseguesを、設定した場合seguesでのViewControllerをスキップする

あなたの唯一のオプションは、A->B->CとあなたがBA->Cをスキップしたものを言います。だから、あなたはとBの両方からCへのセグを持つ必要があります。

もちろん、このアプローチを使用すると、まったく表示されなかったViewControllerに対してunwind segueを使用することはできません。この問題は、巻き戻しセグを使用せず、セグを「後方に」設定することで解決できます。私が「後ろ向き」を意味するのは、セグの設定をとし、セグの順番がA->C->D->Bであっても、Bに戻ることができるということです。

+0

私はそれが非常に複雑な構造を作るように感じます。 https://i.stack.imgur.com/oTC0m.png – nomadoda

+1

これはデザイン上の理由からセグの限界です。あなたがセグを使用しないようにナビゲーションを完全に変更しない限り、私はあなたがより複雑ではない方法で必要なものを達成するための他の方法を見ません。 –

0

私は最後にかなりきれいな解決策を見つけたと思います。 2つのコンテナビューを保持する別のビューコントローラを追加しました.1つは 'B'、もう1つは 'C'です。私は「Dは」をswitchToC()をトリガー新しいのViewControllerにおくつろぎましょう

func switchToB() { 
    containerB.isHidden = false 
    containerC.isHidden = true 
} 

func switchToC() { 
    containerB.isHidden = true 
    containerC.isHidden = false 
} 

:どのコンテナが示されるべきは、これらの2つの単純な機能によって管理されています。

関連する問題