Как добавить контроллер навигации программно в код, но не как начальный контроллер представления
Я относительно новичок в 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)
Теперь вместо использования объекта контроллера просмотра используйте объект контроллера навигации.