Как добавить контроллер навигации программно в код, но не как начальный контроллер представления

Я относительно новичок в Swift и iOS и не могу найти ответ или любую помощь для моей проблемы, которая работает.

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

Есть ли способ установить новое представление, которое я создаю, нажав кнопку в первом представлении, чтобы стать корневым контроллером для моего вида навигации?

Краткая версия моего кода:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(frame: CGRect(x: view.frame.width / 2, y: view.frame.height / 2, width: 40, height: 40))
        button.backgroundColor = .red
        button.tintColor = .white
        button.setTitle("Test", for: .normal)
        button.addTarget(self, action: #selector(change), for: .touchUpInside)
        view.addSubview(button)
    }

    func change () {
        let otherView = SecondViewController()
        self.present(otherView, animated: true, completion: nil)
    }

}

class SecondViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .yellow
    }

}

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

Второй контроллер представления, который я представляю, должен иметь тип UIViewController или UINavigationController?

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

Изменение: У меня нет фона Objective-C и изучения Swift в течение примерно 4 недель.

Ответ 1

Вы можете добавить UINavigationController как UINavigationController ниже:

Сначала вам нужно создать объект SecondViewController,

let objVC: SecondViewController? = storyboard?.instantiateViewController(withIdentifier: "SecondViewController")

Или

let objVC: SecondViewController? = SecondViewController(nibName: "SecondViewController", bundle: nil)

Или

let objVC: SecondViewController? = SecondViewController()

Затем добавьте Навигация в SecondViewController

let aObjNavi = UINavigationController(rootViewController: objVC!)

Если вы хотите представить, используйте:

self.present(aObjNavi, animated: true) { 
}

Если вы хотите нажать, то используйте:

self.navigationController?.pushViewController(aObjNavi, animated: true)

Если вы хотите установить в качестве корневого контроллера, используйте:

let appDelegate: AppDelegate = (UIApplication.shared.delegate as? AppDelegate)!
appDelegate.window?.rootViewController = aObjNavi

Ответ 2

var objVC: UIViewController? = storyboard.instantiateViewController(withIdentifier: "ViewController")

var aObjNavi = UINavigationController(rootViewController: objVC)

Теперь вместо использования объекта контроллера просмотра используйте объект контроллера навигации.