Swift: нельзя использовать navigationController.pushViewController внутри функции - PullRequest
1 голос
/ 12 марта 2019

Я переключаюсь между представлениями программно, используя приведенный ниже код, и это повторяется довольно часто, поэтому я хотел создать глобальную функцию, но я не могу понять, как это можно сделать.

Код работает при вызове внутри класса 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")

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Независимо от функции, в которой находится этот код, его необходимо обновить, чтобы получить параметр типа 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)
    }
}

1 голос
/ 12 марта 2019

Вы хотите сделать что-то подобное?:

extension UIViewController {
    func presentView(withIdentifier: String) {
        if let newVC = self.storyboard?.instantiateViewController(withIdentifier: withIdentifier) {
        self.present(newVC, animated: true, completion: nil)
        }
    }
}

Вы можете назвать это так:

self.presentView(withIdentifier: "yourIdentifier")
...