How to implement a UINavigationController for modal presentation, not for popover, with an adaptive segue
当使用一个通用的故事板和自适应segues时,如何能够实现一个popover segue的礼物,它只有一个导航栏(带有标题和关闭按钮)在iPhone上,当以popoover的形式出现时,它不会在iPad上有导航控制器?
我认为正确的设置是不要在故事板中包含导航控制器,控制拖动到新的视图控制器,并选择一个作为Popover Segue的礼物。然后在
rdelmar是正确的,您不能在
在iOS7和更早的版本中,您必须将导航控制器添加到故事板中,然后您可以将单独的段添加到导航控制器及其根视图中。然后根据您是否需要导航控制器(iPhone)或不是(iPad),触发正确的信号。
在iOS 8中,您可以使用新的
1 2 3 4 5 | func presentationController(controller: UIPresentationController!, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController! { let presented = controller.presentedViewController return UINavigationController(rootViewController: presented) } |
稍微详细说明一下,如果你想要的是iPad上的弹出窗口,而iPhone上有一个关闭按钮的模式表,那么这就是你要做的。
在Xcode6.3故事板中,您连接了一个视图控制器,并将segue指定为"present as popoover"。
此代码应该位于与Popover分离的视图控制器中,而不是位于Popover本身中:
首先设置Popover代理:
1 2 3 4 5 6 7 | override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier =="myPopoverSegueName") { let vc = segue.destinationViewController vc.popoverPresentationController?.delegate = self return } } |
然后添加代理扩展并动态创建导航控制器/关闭按钮:
1 2 3 4 5 6 7 8 9 10 | 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 } } |
然后你添加了你的解雇功能,你应该很好的去:
1 2 3 | func dismiss() { self.dismissViewControllerAnimated(true, completion: nil) } |