2016-11-04 5 views
0

私は現在、次のように遷移するアプリケーションに取り組んでいる:(ナビゲーション・コントローラに埋め込まれた)複数のインラインUINavigationController間の移行方法?

テーブルビューコントローラ - > タブバー・ビュー・コントローラ - に埋め込ま> 1~4のビューコントローラ(それぞれ

4つの埋め込みビューコントローラのうちの1つに移行した後も、以前の遷移スタックを維持しながら(「ユーザー」が簡単に戻ることができるように)、「新しい」ナビゲーションコントローラを引き継ぎたい。残念ながら、元のナビゲーションは新しく生成されたナビゲーション(そのタイトルは上のバーの後ろにかすかに見える)をカバーしているようだ。

私は「ストーリーボード」を好むので、可能であればプログラム的なアプローチを避けたいと思います。

はところで:私は感謝

のXcode 6.2でスウィフトを使用して開発しています。

+0

私はあなたの構造を再考する必要があると思います。最初のnavコントローラからタブバーを開き、タブ2に切り替えたら、どこに戻るボタンが表示されますか? スタックを保持したい場合は、最初のナビゲーションコントローラーのすべてを元に戻す必要があります。 – skwashua

+0

私は4つのビューコントローラの戻るボタンをタブバーコントローラに戻したいと思います。自分のナビゲーションコントローラに4つのビューコントローラを組み込んだ理由は、編集/完了ボタンとそれに関連する動作を個別に操作できるようにするためです。あなたがこれを達成するための構造について、何か提案や役に立つヒントを持っているなら、それは非常に感謝しています。 – HumbleOne

+0

@mattあなたの洞察に感謝します。私はあなたが建設的に問題に取り組むことができてうれしく思っています。私はあなたが答える資格以上のものだと確信しています。 – HumbleOne

答えて

0

コードとプロジェクトを更新し、Swift 3を学び、プログラム的な変更を学びます。質の高いiOSデベロッパーになることを望むなら、変更を受け入れることを学ぶことは、あなた自身の成功に向けた大きなステップです。コード内にナビゲーションコントローラを追加するのは非常に簡単です。ストーリーボードを通してすべてのことを強制することは自分自身を収縮させるだけです。私はこのチュートリアルを使用して、コード内の要素をどのように処理するかを学ぶことから始めました。 https://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift

これを使用してNavigationControllerを設定します。ここでは、ストーリーボードでのナビゲーションコントローラと同じ復元識別子が使用されていることと、「Main」とはナビゲーションがあるストーリーボードの名前コントローラが存在する。クラス変数メイクなど

private extension UIStoryboard { 
    class func mainStoryboard() -> UIStoryboard { 
     return UIStoryboard(name: "Main", bundle: Bundle.main) 
    } 
    class func someNavigationController() -> UINavigationController? { 
     return mainStoryboard().instantiateViewController(withIdentifier: "SomeNavigationController") as? UINavigationController 
    } 
} 

:私はこれを行う多くのビューコントローラを持って

someNavigationController = UIStoryboard.someNavigationController()! 
someViewController = someNavigationController.childViewControllers.first! as! EiValueTableViewController 
someNavigationController.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height) 
view.addSubview(someNavigationController.view) 
addChildViewController(someNavigationController) 
someNavigationController.didMove(toParentViewController: self) 

var someNavigationController: UINavigationController! 
var someViewController: UIViewController! 

あなたはこのように、ナビゲーションコントローラを表示したい関数の内部との並べ替え。彼らはまだ完全にストーリーボードで作られていますが、これはあなたがセグを使って移行することを余儀なくされるのではなく、あなたが望む方法でそれらを使うことを可能にします。プログラマチックに行うことを依然として拒否している場合は、SplitViewControllerに移行することができます。このSplitViewControllerは、ガイドを見つけるのは簡単なはずですが、このような使い方を厳しくすることができます。

+0

私が間違っていると私を許しますが、あなたの回答は私の質問に正確には対応していません。私は最初のナビゲーションコントローラがそれをカバーしているように、ナビゲーションコントローラの2番目のセットを正しく表示するのに問題があります。また、一時的であっても、元のnavコントローラを隠すだけで、動的な戻るボタンの自動生成がなくなり、タブバーコントローラに戻ることが懸念されます。 – HumbleOne

+0

あなたは状態を保存したいと言った。そうするなら、シングルトンやコアデータに物事を保存し、はるかに複雑な人生に戻すことを計画しない限り、あなたはそれを隠蔽します。私があなたに示す方法は、それを隠蔽していますが、この時点で行うべきことは、 'UIView.animateWithDuration(1){someNavigationController.view.origin.x = 0 - someNavigationController.view.frame.width}'のようなものですsomeNavigationController.view.removeFromSuperview then someNavigationController.removeFromParentController()そしてsomeNavigationController = nilとuが開始に戻ります – Sethmr

+0

そのチュートリアルを見て、そのコードを試してみてください。それはあなたに多くを教えてくれるでしょう! – Sethmr

関連する問題