检查警报框中的文本字段是否为空时遇到一些问题

时间:2015-11-01 02:46:09

标签: ios swift uialertcontroller

所以有一点我现在一直试图弄清楚没有运气。我想做的就是这样......

  1. 弹出操作表,点击选项,弹出警报框
  2. 警告框中的文字字段要求命名一个套牌
  3. 输入姓名,"确定"被点击并且segue将用户带到下一个屏幕。
  4. 如果textfield为空,则弹出另一个警告框,告诉用户输入有效名称。
  5. 现在我想检查警报框中的文本字段是否为空,所以我所做的是在showAlertTapped函数中添加了一个检查变量,以检查文本字段是否为空。使用if语句进行segue,或者弹出第二个警告框。我的问题是弹出第二个警告框,要求输入有效名称,无论文本字段是否为空。我尝试改变一些东西,比如初始的bool检查变量,还要切换textField.text =="" to textField.text == nil,但所有这些都是segue两次都没有显示警告框。我尝试过的其他一些事情已经让我大吃一惊,但最终的结果总是一样的,无论是两次都是两次,还是第二次警告。所以我被卡住了。我将发布代码,以便更容易看到我是否完全遗漏了某些东西,如果我的格式化为此帖子,或者如果我的代码不是那么整洁,我会提前道歉。我仍然是一名初学者,随时随地学习。因此,如果我有一些草率或格式错误,我会愿意解决它。感谢您的时间。

    func showAlertTapped() {
        var check = true
    
        //Create the AlertController
        let firstAlert: UIAlertController = UIAlertController(title: "New questions deck", message: "Enter a name for your questions deck", preferredStyle: .Alert)
    
        //Create and add the Cancel action
        let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
    
        }
        firstAlert.addAction(cancelAction)
    
        let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in
    
            if check == true {
                self.shouldPerformSegueWithIdentifier("saveSegue",sender: self)
    
    
            }
    
            else{
    
                let alert: UIAlertController = UIAlertController(title: nil, message: "Please enter a valid name", preferredStyle: .Alert)
    
                alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
                    self.dismissViewControllerAnimated(true, completion: nil)
                }))
    
    
    
                //Present the AlertController
                self.presentViewController(alert, animated: true, completion: nil)
            }
    
    
    
        }
        firstAlert.addAction(saveAction)
    
        //Add a text field
        firstAlert.addTextFieldWithConfigurationHandler { textField -> Void in
            if textField.text == "" {
                check = false
            }
    
        textField.textColor = UIColor.blueColor()
    
    
    
        }
    
        //Present the AlertController
        self.presentViewController(firstAlert, animated: true, completion: nil)
    
    }
    

1 个答案:

答案 0 :(得分:0)

无论设计如何,只需使代码正常工作:

问题:

 if textField.text == "" {
        check = false
 }

此代码将无法按预期方式工作,块将在显示之前调用,而不会在文本字段更改时调用。见this document

所以要修复它,你可以在用户点击保存按钮时检查文本字段是否为空:

 let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in
    let text = (firstAlert.textFields?[0] as UITextField).text
    if text != nil && text!.characters.count>0 {
        self.performSegueWithIdentifier("saveSegue",sender: self)
    }
   ....other codes....
 }

我没有测试代码,希望它能运行。如果有任何错误,请发表评论。