Swift:无法在函数内使用navigationController.pushViewController

时间:2019-03-12 18:32:45

标签: swift uinavigationcontroller pushviewcontroller

我正在使用下面的代码以编程方式在视图之间进行转换,并且重复很多次,因此我想创建一个全局函数,但似乎无法掌握它。

该代码在ViewController类中调用时有效,所以我想问题是我的函数不知道我想在哪个VC上调用navigationController.pushViewController,但是我也不知道如何引用VC作为传递给函数的参数,或者更好的方法是使用.self之类的东西来调用当前的VC类。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ExamplesControllerVC")
self.navigationController?.pushViewController(vc, animated: true)

如果我尝试在单独的文件中将其作为函数运行,则会出现以下错误:

  

使用未解决的标识符“ navigationController”;您是说'UINavigationController'吗?

所以我想创建和调用的函数是这样的:

showVC("ExamplesControllerVC")

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

此代码所具有的任何功能都需要更新以采用UIViewController类型的参数。

func showMain(on vc: UIViewController) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ExamplesControllerVC")
    vc.navigationController?.pushViewController(vc, animated: true)
}

现在您可以将其称为:

showMain(on: someViewController)

或将此功能添加到UIViewController的扩展名中,然后使用self就可以了。

extension UIViewController {
    func showMain() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "ExamplesControllerVC")
        self.navigationController?.pushViewController(vc, animated: true)
    }
}