我有3个UISplitViewController,它们具有不同的主视图,但是它们具有相同的详细信息视图。它们全部都连接在情节提要中。

所有UISplitViewController都嵌套在UITabBarViewController中,因此我通过标签栏项目在它们之间切换。

问题是,当我切换到另一个选项卡(另一个UISplitViewController)时,详细信息视图消失了,我只能看到主视图,而详细信息视图的位置则用深灰色填充(请参见图片)。我不想在切换后重新加载详细视图,只需将其保留在屏幕右侧即可。

ios - 一个UISplitView的详细 View-LMLPHP

我不确定我需要提供什么代码,因此如果需要,请询问,我将其添加到问题中。

谢谢你的帮助!

最佳答案

原因

我的第一个假设是,如果您在与UISplitViewController的两个选项卡相对应的两个不同的UITabController之间共享一个细节视图控制器,则会创建两个单独的细节视图控制器。
这是通过具有以下布局的测试项目确认的:

ios - 一个UISplitView的详细 View-LMLPHP
Root View ControllerDetailViewController。当我在viewDidLoad(_:)中放置一个断点时,它被击中两次,并且打印显示创建了DetailViewController的两个不同实例:

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

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



使用共享的容器视图控制器作为两个UISplitViewController的详细信息视图控制器。

您的新情节提要板布局将如下所示:

ios - 一个UISplitView的详细 View-LMLPHP
  • 为您的详细信息视图控制器(在本例中为导航控制器)提供一个Storyboard ID:

  • ios - 一个UISplitView的详细 View-LMLPHP
  • 接下来,在您的应用程序委托中,实例化详细信息视图控制器:
    // 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的子类,其内容如下:
    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)
    }
    

  • 使用此设置,您会发现相同的详细信息视图控制器实例在选项卡之间共享,并且当您切换到新选项卡时,一个选项卡中的修改将保留。

    关于ios - 一个UISplitView的详细 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36990787/

    10-13 03:54