检查连接并对第二个视图控制器执行segue

时间:2017-01-10 05:27:28

标签: ios swift uistoryboardsegue viewdidload

我遇到了奇怪的事情,不明白为什么它不起作用。

我正在使用此项目来检查互联网连接的类型。我的想法是检查连接并跳转到登录页面或如果设备未连接则停留在第一个控制器上。

这是我的代码:

class ViewController: UIViewController {

    @IBOutlet weak var connectionTypeLabel: UILabel!

    @IBAction func test(_ sender: Any) {


        self.performSegue(withIdentifier: "showLogin", sender: self)


    }


    let status = Reach().connectionStatus()



    override func viewDidLoad() {
        super.viewDidLoad()




        self.connectionTypeLabel.text = ""

        switch self.status {
        case .unknown, .offline:

            self.connectionTypeLabel.text = "No Connected"

        case .online(.wwan):

            self.connectionTypeLabel.text = "Connected!"

            self.performSegue(withIdentifier: "showLogin", sender: self)            
        case .online(.wiFi):

            self.connectionTypeLabel.text = "Connected!"
            self.performSegue(withIdentifier: "showLogin", sender: self)        
        }


    }

我正在尝试viewDidLoad和viewWillAppear方法。

我真的不明白为什么文本标签正确地更改文本而程序不会进入登录视图控制器。

我创建了一个测试按钮,用于检查performSegue功能是否正常工作,并且工作正常。我不知道为什么它不在viewDidLoad方法中工作

1 个答案:

答案 0 :(得分:1)

请尝试将支票移至viewWillAppear,因为performSegue无法在viewDidLoad上正常工作,并在发货时间内变形,如:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.02, execute: {
     self.performSegue(withIdentifier: "showLogin", sender: self)  
})

更好的方法是转储vc并将检查代码移至AppDelegate中的didFinishLaunchingWithOptions,如:

case .online(.wwan), .online(.wiFi):
   let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginVC")
   window?.rootViewController = loginVC
   window?.makeKeyAndVisible()

如果没有连接,请执行类似操作,但使用loginVC更改noConnectionVC,您需要在故事板中为您的vc提供一个标识符,以便在代码中对其进行初始化