2016-05-02 9 views
2

私は3つの異なるマスタービューを持つ3つのUISplitViewControllerを持っていますが、それらは同じ詳細ビューを持っています。それらのすべてはストーリーボードで接続されています。いくつかのUISplitViewの詳細ビューの1つ

すべてUISplitViewControllerUITabBarViewControllerにネストされているので、タブバー項目を使用してそれらの間を切り替えます。

問題は、別のタブ(別のUISplitViewController)のディテールビューが消えると、マスタービューだけが表示され、ディテールビューのプレースは濃いグレーで塗りつぶされます(写真参照)。私は、切り替えた後に詳細ビューをリロードするのではなく、そのまま画面の右側に置いておきます。

enter image description here

私が提供する必要がどのようなコードはよく分からないので、あなたがいずれかを必要とする場合、私は疑問にそれを追加します、お願いします。

ありがとうございました!

答えて

1

原因

私の最初の仮説を使用して、UITabControllerの二つのタブに対応する2つの別個のUISplitViewControllerの間詳細ビュー・コントローラを共有する場合、二つの別々の詳細ビューコントローラが作成されていることでした。 これは、このレイアウトでテストプロジェクトで確認されています

enter image description here

Root View ControllerDetailViewControllerです。私はviewDidLoad(_:)内のブレークポイントを置くとき、それは二回ヒット取得し、印刷がDetailViewControllerの2つの異なるインスタンスが作成されていることを示しています

(lldb) po self 
<TestTabSplit.DetailTableViewController: 0x7fbd10eb9cd0> 

(lldb) po self 
<TestTabSplit.DetailTableViewController: 0x7fbd10ebc700> 

ソリューション

2の詳細ビューコントローラなどの共有コンテナビューコントローラを使用しますUISplitViewController s。

新しいストーリーボードのレイアウトは次のようになります。

enter image description here

  1. はあなたの詳細ビューコントローラ(この場合は、ナビゲーションコントローラ)、ストーリーボードIDを与える:

enter image description here

  1. override func viewDidAppear(animated: Bool) { 
        super.viewDidAppear(animated) 
    
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
        let sharedNavigationController = appDelegate.sharedNavigationController 
    
        addChildViewController(sharedNavigationController) 
        sharedNavigationController.view.frame = view.bounds 
        view.addSubview(sharedNavigationController.view) 
        sharedNavigationController.didMoveToParentViewController(self) 
    } 
    

// Add a variable to reference from elsewhere. 
var sharedNavigationController: UINavigationController! 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    sharedNavigationController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SharedID") as! UINavigationController 
    return true 
} 
  • 最後に、コンテナビューコントローラ、ContainerViewControllerは、次の内容のUIViewControllerだけのサブクラスである:、アプリのデリゲートでは、詳細ビューコントローラをインスタンス化この設定では、同じ詳細ビューのコントローラインスタンスがタブ間で共有され、新しいタブに変更すると、あるタブの変更が保持されます。

  • +0

    偉大な答え!ありがとうございました! –

    関連する問題