原因
私の最初の仮説を使用して、UITabController
の二つのタブに対応する2つの別個のUISplitViewController
の間詳細ビュー・コントローラを共有する場合、二つの別々の詳細ビューコントローラが作成されていることでした。 これは、このレイアウトでテストプロジェクトで確認されています
Root View Controller
がDetailViewController
です。私はviewDidLoad(_:)
内のブレークポイントを置くとき、それは二回ヒット取得し、印刷がDetailViewController
の2つの異なるインスタンスが作成されていることを示しています
(lldb) po self
<TestTabSplit.DetailTableViewController: 0x7fbd10eb9cd0>
(lldb) po self
<TestTabSplit.DetailTableViewController: 0x7fbd10ebc700>
ソリューション
2の詳細ビューコントローラなどの共有コンテナビューコントローラを使用しますUISplitViewController
s。
新しいストーリーボードのレイアウトは次のようになります。
- はあなたの詳細ビューコントローラ(この場合は、ナビゲーションコントローラ)、ストーリーボードIDを与える:
次
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
だけのサブクラスである:、アプリのデリゲートでは、詳細ビューコントローラをインスタンス化この設定では、同じ詳細ビューのコントローラインスタンスがタブ間で共有され、新しいタブに変更すると、あるタブの変更が保持されます。
偉大な答え!ありがとうございました! –