【问题标题】:How to pass (optional) completion handler closure to transitionFromViewController in Swift?如何在 Swift 中将(可选)完成处理程序闭包传递给 transitionFromViewController?
【发布时间】:2014-10-11 13:29:51
【问题描述】:

在我的应用程序的 ViewController 中,我调用了 transitionFromViewController 但在将闭包传递给完成时总是出现以下错误:参数。

Type '() -> Void' does not conform to protocol 'NilLiteralConvertible'

这是函数调用:

    self.transitionFromViewController(
        self.currentVC,
        toViewController: newController,
        duration: 0.2,
        options: UIViewAnimationOptions.TransitionCrossDissolve,
        nil,
        completion: { finished in
            fromViewController.removeFromParentViewController()
            toViewController.didMoveToParentViewController(containerViewController)
            toViewController.view.frame = containerViewController.view.bounds
    })

根据代码完成,方法签名如下:

transitionFromViewController(fromViewController: UIViewController, toViewController: UIViewController, duration: NSTimeInterval, options: UIViewAnimationOptions, animations: () -> Void(), completion: ((Bool) -> Void)?)

【问题讨论】:

    标签: ios uiviewcontroller swift


    【解决方案1】:

    您不能将 nil 传递给 animations 参数 () -> Void() 声明为 not optional

    如果需要,请传递空 closure

    self.transitionFromViewController(
            self.currentVC,
            toViewController: newController,
            duration: 0.2,
            options: UIViewAnimationOptions.TransitionCrossDissolve,
            animations: { () -> Void in
    
            },
            completion: { finished in
                fromViewController.removeFromParentViewController()
                toViewController.didMoveToParentViewController(containerViewController)
                toViewController.view.frame = containerViewController.view.bounds
        })
    

    【讨论】:

    • 在删除之前,您应该根据文档调用 willMoveToParentViewController(nil)!
    【解决方案2】:

    我认为以下代码应该对您有所帮助:

    self.transitionFromViewController(fromViewController, toViewController: toViewController, duration: 0.1, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
                // code for animations
                }) { (value: Bool) -> Void in
                // code after completion
            }
    

    Where, // 动画代码 - 您要在块中执行的代码。 并且, // 完成后的代码 - 您要在块完成后执行的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-11-09
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多