2017-10-17 28 views
0

我有两个视图控制器,第一个包含一个按钮,当我按下该按钮时,我希望它检查textField,如果它包含任何值,没有。我想要一个警报出现说“输入一个值”。如果它包含一个值,我想转移到下一个视图控制器。如何仅在条件为真的情况下执行segue

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 

    if identifier == "segue1"{ 

    if txtField.text?.isEmpty == true{ 
     //alert "input value"   
     return false; 
    } 
    else{ 
     } 
     //segue occurs no problem 
     return true; 

} 

我已经尝试了许多其他方法来做到这一点,似乎没有工作。任何信息表示赞赏,谢谢。 (新的迅速和堆栈溢出对不起)

+0

你的代码看起来很合理。你是否设置了一个断点并单步穿过来看看发生了什么?一种可能性是'txtField.text'是'nil',所以可选的执行不会发生。你可以使用'if(txtField.text ??“”).isEmpty {' – Paulw11

+0

检查你的插座连接 –

+0

@ V-Dev我不知道你是什么意思,检查插座连接。我读过这可能是问题所在。但是当我去检查他们时,我并不知道我在找什么。 [链接](https://imgur.com/a/ozU4q)​​这里是每个插座imgur。如果可以的话,请看看它们。谢谢。 –

回答

0

您的推理是正确。检查以下几点,以确保您的代码工作:

  1. 你有赛格瑞按钮目标视图控制器
  2. 您的segue标识符是segue1在您的代码中。
  3. UITextField为空时,您的isEmpty工作。

如果这些都是正确的,你需要重写shouldPerformSegue(withIdentifier:sender:),你没有,但你可以提高代码并通过执行以下操作添加警报:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 

    if identifier == "segue1" { 
     if txtField.text?.isEmpty { 
      let alertController = UIAlertController(
       title: "Alert", 
       message: "Input value", 
       preferredStyle: .alert 
      ) 

      present(alertController, animated: true, completion: nil) 
      return false 
     } 
    } 

    return true 
} 

有关如何使用UIAlertController检查的详细信息Documentation

+0

我试过这我似乎仍然得到相同的错误。线程1:信号sigabrt在类appdelegate uiresponder uiapplicationdelegate。我真的不明白这个错误以及它是什么原因造成的。你有关于这个错误的任何信息吗? –

+0

你将不得不分享你的'AppDelegate'和完整的错误堆栈,所以我们可以帮助更多 – jvrmed

+0

我有两张图片,我相信他们是需要的信息。如果你能得到任何信息,并可能得到一个令人惊叹的解决方案。 [链接](https://imgur.com/a/sgBdp)谢谢。 –

相关问题