Pu sh новый контроллер вида при нажатии кнопки - PullRequest
0 голосов
/ 20 марта 2020

Я создаю игру в Swift 5 программно и хочу перейти из главного меню к экрану игры. Вот мой код:

func handleButtonsTapped() {
    playButton.addTarget(self, action: #selector(pushGameViewController), for: .touchUpInside)
}

И селектор для управления нажатием контроллера вида при нажатии:

@objc func pushGameViewController() {
    let destinationVC = GameViewController()
    navigationController?.pushViewController(destinationVC, animated: true)
}

Когда я нажимаю кнопку в симуляторе, ничего не происходит. В моей функции viewDidLoad() также вызывается handleButtonsTapped().

Ответы [ 4 ]

0 голосов
/ 22 марта 2020
@objc func pushGameViewController() {
    let destinationVC = storyboard.instantiateViewController(withIdentifier: "GameViewController") as! GameViewController
    navigationController?.pushViewController(destinationVC, animated: true)
}

Обязательно предоставьте контроллеру представления идентификатор раскадровки с именем GameViewController в конструкторе интерфейса

0 голосов
/ 20 марта 2020

Получил ответ!

По моему SceneDelegate.swift Я установил:

let menuViewController = UINavigationController(rootViewController: MenuViewController())
window?.rootViewController = menuViewController

Теперь все работает! Спасибо всем за комментарии :)

0 голосов
/ 20 марта 2020

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

  1. Прежде всего установите Storyboard Id 'GameViewController' (согласно скриншоту).
  2. Затем замените функцию pushGameViewController на следующую.

    @objc func pushGameViewController() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let destinationVC = storyboard.instantiateViewController(withIdentifier: "GameViewController")
        self.navigationController?.pushViewController(destinationVC, animated: true)
    }
    

enter image description here

0 голосов
/ 20 марта 2020

Это мой код, и он может работать.

Ваш ViewController установлен для UINavigation?

@IBOutlet weak var playButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
    handleButtonsTapped()
}

func handleButtonsTapped() {
    playButton.addTarget(self, action: #selector(pushGameViewController), for: .touchUpInside)
}

@objc func pushGameViewController() {
    let destinationVC = GameViewController()
    navigationController?.pushViewController(destinationVC, animated: true)
}
...