如何在iOS8和Swift中推送视图

时间:2014-12-05 14:35:20

标签: swift uiview uipickerview

我正在更新iOS5之前的应用程序 - 因此需要更改。 在现有应用程序中,我们将视图(在笔尖中创建)推送到包含UIPickerView / UIDatePicker的屏幕上,以允许用户进行选择。

这对于迁移到iOS8 / Swift来说应该是一件容易的事情,但过去24小时我一直试图找出使用Storyboard / Segue,Container视图,viewControllers,UIPopoverPresentationControler等进行此操作的最佳方法,但几乎没有达成共识(甚至Apple的示例代码也将UIDatePicker推送到表格单元格中

这似乎是一个常见的要求,我很感激有关别人如何解决这个问题的任何意见/建议。

非常感谢

2 个答案:

答案 0 :(得分:0)

试试这个

self.performSegueWithIdentifier("您的segue标识符",发件人:self)

答案 1 :(得分:0)

感谢您寻求澄清的答案和问题。 经过一个周末的调查后,我意识到我一直陷入了旧的iOS范式。

使用iOS8,所有内容都已移至ViewController演示文稿,允许开发人员控制动画并定义一系列设备(不同方向)的行为。

我的问题(我相信)的确切答案如下:

  1. 使用UIPresentationController呈现所需的UIViewController:
    • 视图控制器是要显示的视图(使用代码,笔尖或故事板来创建选择器视图)
    • 演示控制器管理它的呈现方式(例如size,presentationStyle)
    • 这也是处理透明/模糊视图以涵盖现有内容的地方
  2. 退房: func sizeForChildContentContainer(container:UIContentContainer,withParentContainerSize parentSize:CGSize) - > CGSize func frameOfPresentedViewInContainerView() - >的CGRect

    1. UIPresentationController需要一个转换委托来管理演示文稿(符合UIViewControllerTransitioningDelegate)
    2. {

      // We need to create a presentation controller to manage the presentation of VC
      func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController!, sourceViewController source: UIViewController) -> UIPresentationController? {
          let opc = OverlayPresentationController(presentedViewController: presented, presentingViewController: source)
          return opc
      }
      
      // Get hold of an animation controller for presentation
      func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
          let animationController = OverlayAnimatedTransitioning()
          return animationController
      }
      
      // Get hold of an animation controller for dismissal
      func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
          let animationController = OverlayAnimatedTransitioning()
          return animationController
      }
      
      1. 反过来需要一个动画控制器(UIViewControllerAnimatedTransitioning)来处理动画(幻灯片,溶解或更具冒险性的东西):

        func transitionDuration(transitionContext:UIViewControllerContextTransitioning) - > NSTimeInterval {     返回0.5 }

        func animateTransition(transitionContext:UIViewControllerContextTransitioning){

        let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
        let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
        let containerView = transitionContext.containerView()
        
        let animationDuration = self .transitionDuration(transitionContext)
        containerView.addSubview(toViewController.view)
        
        UIView.animateWithDuration(animationDuration, animations: { () -> Void in
            <<< Animation Here>>>)
            }) { (finished: Bool) in
                transitionContext.completeTransition(true)
        }
        
      2. 使用构建块,然后可以调用所需的UIViewController(使用action / selector / segue),并通过设置所需视图的transitioningDelegate属性来调用所需的效果:

        @IBAction func showOVC(sender: AnyObject) {
            let ovc = OverlayViewController()
            let overlayTransitioningDelegate = OverlayTransitioningDelegate()
            ovc.transitioningDelegate = overlayTransitioningDelegate
            self.presentViewController(ovc, animated: true, completion: nil)
        }
        
      3. 只需拨打:

        即可以同样的方式处理解雇

        dismissViewControllerAnimated(true,completion:nil)

      4. 可以通过文档和优秀的WWDC视频获取更多信息,这些视频让我一切都清楚:A look inside presentation controllers

        或查看apple的示例代码:LookInside

        底线 - 不像以前那么简单(假设单个设备在一个方向上),但是为了更复杂一点,可以更好地控制视图和动画,并能够扩展到多个设备。

        我希望这有助于处于类似位置的人们 感谢