【问题标题】:How to prevent viewing a view when clicking on a button (Swift)单击按钮时如何防止查看视图(Swift)
【发布时间】:2017-02-01 05:53:18
【问题描述】:

我的视图中有一个包含此条件的按钮:

 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 函数中!

因此,当用户未登录并单击此按钮时,我不断崩溃而不是警报!

如何防止查看下一个视图而只显示警报! 所以我可以避免崩溃?

【问题讨论】:

  • 故事板中的segue是否从按钮连接?还是从视图控制器?
  • 从按钮到视图控制器!我这样做是因为同一个查看器连接到另一个视图(通过不使用按钮的视图)
  • 我解决了!

标签: ios swift button segue firebase-authentication


【解决方案1】:

根据您的描述,听起来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

  • 这可以通过选择故事板中的 segue 轻松检查

【讨论】:

  • 好的!您没有更改代码中的任何内容!但是通过segue而不是按钮连接两个视图后已经解决了!
  • 是的,我过去也喜欢它。如果通过按钮连接,则始终执行 segue。很高兴你解决了。
  • 不用解释了!已经解决了!谢谢!
  • 你知道,如果其他人可能会遇到类似的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多