UISplitViewController 首先显示详细视图

Posted

技术标签:

【中文标题】UISplitViewController 首先显示详细视图【英文标题】:UISplitViewController shows detail view first 【发布时间】:2016-08-11 02:05:19 【问题描述】:

我对 ios 开发非常陌生。在我的应用程序中,我有一个标签栏,在其中一个标签中,我有一个 UISplitViewController。我的问题是,当我转到选项卡时,它首先显示详细信息视图。然后我必须单击后退按钮才能获得主视图。我发现另一个人在 *** 上遇到了这个问题,但解决方案是在 Objective-c 中,我正在使用情节提要(不知道如何将一个类附加到它)并且 swift,所以这没有帮助。

在纵向模式下使用 ipad 时它也不起作用。当我切换到横向时,它工作正常,但在纵向模式下只显示黑屏(无后退按钮)。任何帮助,将不胜感激。谢谢。

我不确定您还需要什么其他信息或希望我显示什么,所以如果我遗漏了什么,请告诉我。

调整后的 appdelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    let tabBarController = self.window!.rootViewController as! UITabBarController
    let splitViewController = tabBarController.viewControllers![3] as! UISplitViewController

    ///////////////////Always visible property
    splitViewController.preferredDisplayMode = .AllVisible
    ///////////////////
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
    splitViewController.delegate = self
    return true

更新:最终修复了这个答案Open UISplitViewController to Master View rather than Detail

【问题讨论】:

【参考方案1】:

我在项目中创建了一个示例SplitViewController,并在appdelegate 中设置了属性。这对我有用https://github.com/harsh62/***_TestMasterDetailApp

splitViewController.preferredDisplayMode = .AllVisible

完整功能如下:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    let splitViewController = self.window!.rootViewController as! UISplitViewController
    ///////////////////Always visible property
    splitViewController.preferredDisplayMode = .AllVisible
    ///////////////////
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
    splitViewController.delegate = self
    return true

参考资料: UISplitViewController - set always visible master controller when

【讨论】:

谢谢。我回家后会试试这个并告诉你。 我尝试了代码并收到此错误无法将类型“UITabBarController”(0x1024988b0)的值转换为“UISplitViewController”(0x1024a5240)。 (lldb) 您正在设置此属性,这就是您收到此错误的原因。尝试在拆分控制器对象上设置preferredDisplayMode 我直接在storyboard中创建了splitviewcontroller,所以没有控制器类。我应该在哪里更改首选显示模式? 你查看我为你制作的 github 示例了吗?

以上是关于UISplitViewController 首先显示详细视图的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController - 双列样式不起作用

UISplitViewController 一致分隔符

UISplitViewController - 并排或纵向叠加

在 UIViewControllers 和 UISplitViewController 之间导航 [关闭]

将 UIToolBar 放在 UISplitViewController 上方?

UISplitViewController + UISearchController 显示搜索细节