Swift: невозможно нажать для просмотра контроллера программно - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь программно запустить другой viewcontroller с помощью этого кода:

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! MenuController
self.navigationController?.pushViewController(loginVC, animated: true)

Вот мои настройки: у меня есть файл swift с именем: MenuController, который содержит этот код, я установил имя идентификатора в: LoginViewController Я установил для обоих классов ViewControllers значение MenuController.Но всякий раз, когда я нажимаю кнопку, чтобы вызвать событие, оно ничего не делает.

Вот остальная часть моего кода в соответствии с просьбой:

import UIKit

class MenuController: UIViewController {

    var thingy = 0

    @IBAction func ThingyBttn(_ sender: UIButton) {
        if(thingy == 1) {
            print("ok")
        }else{
            print("good")

            let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! MenuController
            self.navigationController?.pushViewController(loginVC, animated: true)
        }
    }

    @IBOutlet var myButton: UIButton!

    @IBAction func Button(_ sender: UIButton) {
        if let ButtonImage = myButton.image(for: .normal),
            let Image = UIImage(named: "ButtonAppuyer.png"),
            UIImagePNGRepresentation(ButtonImage) == UIImagePNGRepresentation(Image) {
            thingy = 1

            print("1")                
        } else {
            thingy = 2

            print("2")
        }   
    }

}

Я знаю, что все остальное с кодомработает нормально, потому что печатает сообщение.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я думаю, что ваши контроллеры вида не находятся в Navigation Stack, поэтому его не нажимают на контроллер следующего вида

let nextVC = self.storyboard?.instantiateViewController(withIdentifier: “nextvc”) as! nextvc
let navigation = UINavigationController(rootViewController:self) 
UIAppliaction.window!.rootViewController = navigation  
navigation.pushViewController(nextVC, animated: true)
0 голосов
/ 18 сентября 2018

Вам необходимо вставить виртуальный контроллер, который вы выполняете, изнутри навигационного контроллера, так как

self.navigationController?

равен nil, или сделать это программно

Редактировать:

Заменить

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! MenuController
self.navigationController?.pushViewController(loginVC, animated: true)

на

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! MenuController
let nav = UINavigationController(rootViewController:self) 
(UIApplication.shared.delegate as! AppDelegate).window!.rootViewController = nav 
nav.pushViewController(loginVC, animated: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...