繁体   English   中英

如何使用自适应segue实现UINavigationController用于模态表示,而不是用于弹出窗口

[英]How to implement a UINavigationController for modal presentation, not for popover, with an adaptive segue

在使用通用故事板和自适应segue的同时,如何实现一个Present As Popover segue,它只在iPhone上以模态方式显示导航栏(带标题和关闭按钮),并且在呈现时不会在iPad上安装导航控制器作为一个popover?

我认为正确的设置是不在故事板中包含导航控制器,控制 - 拖动到新的视图控制器并选择当前弹出窗口。 然后在prepareForSegue需要创建导航控制器并在其中嵌入目标控制器,然后添加标题和按钮,但前提是它将以模态方式呈现。 如果这种方法是正确的,那怎么能在代码中做到这一点?

Rdelmar是正确的,你不能在prepareForSegue这样做,因为已经设置了目标视图控制器。

在iOS 7及更早版本中,您必须将该导航控制器添加到故事板,然后您可以将单独的segue添加到导航控制器及其根视图。 然后根据您是否需要导航控制器(iPhone)(iPad)触发右侧segue。

在iOS 8中,您可以使用新的UIAdaptivePresentationControllerDelegate协议,然后在需要的地方动态创建导航控制器:

func presentationController(controller: UIPresentationController!, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController! 
{
  let presented = controller.presentedViewController
  return UINavigationController(rootViewController: presented)
}

稍微详细说明一下,如果你想要的是你的iPad上有一个弹出框,而是一个带有关闭按钮的模态表,那么你就是这样做的。

在Xcode 6.3 storyboard中,您连接一个视图控制器并将segue指定为“Present as Popover”

此代码应位于视图控制器中,该控制器将分段为弹出框,而不是弹出框本身:

首先设置popover委托:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "myPopoverSegueName") {
        let vc = segue.destinationViewController
        vc.popoverPresentationController?.delegate = self
        return
    }
}

然后添加委托扩展并动态创建导航控制器/关闭按钮:

extension myViewController: UIPopoverPresentationControllerDelegate {

    func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
        let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
        let nav = UINavigationController(rootViewController: controller.presentedViewController)
        nav.topViewController.navigationItem.leftBarButtonItem = btnDone
        return nav
    }

}

然后你添加你的解雇功能,你应该好好去:

func dismiss() {
    self.dismissViewControllerAnimated(true, completion: nil)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM