首页 文章

如何以纵向方向关闭UISplitController的模态表示

提问于
浏览
2

我的项目是在swift 2中并且在两个方向都有效 .

我有一个模态呈现的UISplitViewController .

在主视图的导航栏中,我有一个用于关闭此按钮的栏按钮 .

当我以横向模式打开控制器时,关闭按钮工作正常,因为主视图始终是可见的,并且他的父视图和呈现视图控制器都可以 .

问题出在纵向方向,因为当我点击取消按钮时,主视图并不总是可见,而他的父级和呈现控制器为空 .

有解决方案吗?

提前致谢

presenting controller

我从故事板中提出了一个模态splitViewController:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if segue.identifier == "splitSegue" {

    let split = segue.destinationViewController as! UISplitViewController
    let masterNav = split.viewControllers[0] as! UINavigationController
    let master = masterNav.topViewController as! MasterController
    master.delegate = self
}}

这是解雇的代表乐趣:

func updateAppCategory(master: MasterController) {

    self.presentedViewController?.dismissViewControllerAnimated(true, completion: nil)
}

3 回答

  • 1

    苹果推荐的解雇所呈现的视图控制器的方法是让呈现视图控制器处理解雇 . 呈现的视图控制器不应该自行解散 .

    使用委托方法,在委托中创建 didPressCancel 方法,并在用户按取消时调用它 . 并且从呈现视图控制器,在此方法的实现中,关闭呈现的视图控制器 .

  • 3

    我遇到了同样的问题并找到了解决方案:

    splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
    

    当您在viewdidload中插入它时,您可以在纵向和横向模式下关闭splitviewcontroller

  • 2

    Edgar 's solution works however if you don' t想要使用那种显示模式,您可以在解除拆分视图之前立即设置 PreferredDisplayMode.AllVisible (而不是 ViewDidLoad

    这是我在主控制器中使用的Xamarin.iOS代码 . 在肖像和风景中工作 .

    partial void btnExitModalSplitViewControllerAllOrientations_Activated(UIBarButtonItem sender)
    {
        SplitViewController.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
        SplitViewController.DismissViewController(true, null);
    }
    

相关问题