2016-09-23 38 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