2016-09-23 35 views
2

我有鑑於上一個按鈕,包含此條件時,點擊查看視圖:如何防止上的按鈕(SWIFT)

FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
     if let user = user { 
      self.performSegue(withIdentifier: "AddDevice", sender: nil) 
     } 
     else { 
      let alert = UIAlertController(title: "Sorry", message:"You Have to register", preferredStyle: .alert) 
      alert.addAction(UIAlertAction(title: "Ok", style: .default) { _ in }) 
      self.present(alert, animated: true){} 
     } 
    } 

要檢查用戶是否登錄還是不行! 如果在segue中登錄應該運行並打開下一個視圖

如果沒有警報應該顯示給用戶。

但是下一個視圖包含一個檢索當前用戶數據的函數! (登錄用戶)在viewDidLoad函數!

所以,當用戶沒有登錄,我點擊這個按鈕,我不斷收到崩潰,而不是警報!

如何防止查看下一個視圖並僅顯示警報! 所以我可以避免碰撞?

+0

的SEGUE是對SEGUE在故事板連接從按鈕檢查?或從視圖控制器? – Idan

+0

從按鈕到視圖控制器!我這樣做是因爲同一個查看器連接到另一個視圖(通過視圖不使用按鈕) – Mariah

+0

我解決ittttttt! – Mariah

回答

0

從您的描述聽起來像segue總是在執行,但它不是你想要的。

從視圖控制器本身連接segue,命名並將整個方法連接到IBAction連接到按鈕。

像這樣:

@IBAction func loginDidTouch(sender: AnyObject) { 
    FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
     if let user = user { 
      self.performSegue(withIdentifier: "AddDevice", sender: nil) 
     } 
     else { 
      let alert = UIAlertController(title: "Sorry", message:"You Have to register", preferredStyle: .alert) 
      alert.addAction(UIAlertAction(title: "Ok", style: .default) { _ in }) 
      self.present(alert, animated: true){} 
    } 
} 

爲了說明:

  • 在第一圖像的SEGUE被連接到按鈕。因此,每次按下該按鈕時,它都會執行segue

  • 在第二張圖片中,segue連接到視圖控制器,並且按鈕是只有通過IBAction連接到。因此,該按鈕只會觸發action,並且該操作會觸發segue

  • 這很容易通過選擇在故事板

button selected

vc selected

+0

好的!你沒有改變代碼中的任何東西!但是通過segue連接兩個視圖後不是按鈕就解決了! – Mariah

+0

是的,我過去也爲此而墮落。如果通過按鈕連接,segue總是執行。很高興你解決了它。 – Idan

+0

無需解釋!它已經解決了!謝謝! – Mariah