2017-01-10 59 views
0

我遇到了奇怪的事情,不明白为什么它不工作。检查连接,并执行第二个视图控制器的继续

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

这里是我的代码:

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不知道为什么它不viewDidLoad方法里面工作

回答

1

试着将你的支票viewWillAppear,因为performSegue不会正常工作,并经在调配时间,如:

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

更好的方法是转储VC和移动检查代码AppDelegatedidFinishLaunchingWithOptions,如:

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

对于没有连接做类似的,但改变loginVCnoConnectionVC,你需要给你的vc在故事板上的一个标识符来初始化它的代码

+0

同样的故事:检查正在工作,但执行的不是 – Almazini

+0

你确定你在故事板上正确设置了吗?设置断点并查看segue是否被调用 – Tj3n

+1

由于视图尚未出现,因此无法在'viewWillAppear'中执行segges。它需要在'viewDidAppear'中完成 –

相关问题