2017-01-10 60 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'中完成 –

相關問題