【问题标题】:NavigationController.pushViewController in Custom Segue does not work - Swift 2.0 - iOS 9.1自定义 Segue 中的 NavigationController.pushViewController 不起作用 - Swift 2.0 - iOS 9.1
【发布时间】:2015-11-01 18:28:34
【问题描述】:

我正在 UIStoryboardSegue 中编写自定义转场。我使用 CATransition 创建从右到左的自定义动画。如果我使用sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);,它不会带我进入第二个视图。它只是执行从右到左的动画并停留在第一个视图上。我调试了这段代码,发现 sourceViewController.navigationController 为 nil。我在第一个视图和第二个视图之间有一个 UINavigationController。

我也尝试将这行代码替换为sourceViewController.presentViewController(destinationViewController, animated: false, completion: nil);。过渡确实发生了,但是发生得太快了,我看不到从右到左的动画。

我在这个 UIStoryboardSegue 中的完整代码如下:

override func perform() {


    let sourceViewController = self.sourceViewController as UIViewController;
    let destinationViewController = self.destinationViewController as UIViewController;
    let transition: CATransition = CATransition()

    transition.duration = 0.25;
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromRight;

    sourceViewController.view.layer.addAnimation(transition, forKey: "kCATransition")

    sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);
}

非常感谢您的帮助

【问题讨论】:

    标签: uinavigationcontroller swift2 uistoryboardsegue pushviewcontroller presentviewcontroller


    【解决方案1】:

    使用sourceViewController.pushViewController 是正确的。 sourceViewController.navigationController 得到 nil 的原因是,我将导航控制器放置在第一个视图和第二个视图之间。放置导航控制器的正确方法是放在第一个视图之前。

    【讨论】:

    • 这个答案可能是正确的,但解释得不好。请填写答案
    【解决方案2】:

    我遇到了类似的问题。我的问题是:

    sourceViewController.navigationController == nil
    

    在SourceViewController的storyboard文件中,点击ViewController,然后:

    Editor > Embed in > Navigation controller
    

    然后 Xcode 生成了三个 ViewController:一个初始 NavigationController,然后是 SourceViewController 和 DestinationViewController。

    现在自定义转场起作用了。

    如果这对你有帮助,请告诉我:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多