【问题标题】:Having some trouble checking if textfield within alert box is empty检查警报框中的文本字段是否为空时遇到一些问题
【发布时间】:2015-11-01 02:46:08
【问题描述】:

所以现在我一直试图解决这个问题,但没有运气。我想做的事情是这样的......

  1. 操作表弹出,点击选项会弹出一个警告框
  2. 警告框中的文本字段要求命名牌组
  3. 输入姓名,点击“确定”,segue 将用户带到下一个屏幕。
  4. 如果文本字段为空,则弹出另一个警告框,告诉用户输入有效名称。

现在我想检查警告框中的文本字段是否为空,所以我所做的是在我的 showAlertTapped 函数中添加了一个检查变量,以检查文本字段是否为空。使用 if 语句来继续或弹出第二个警报框。我的问题是弹出第二个警报框,要求输入有效名称,无论文本字段是否为空。我尝试更改一些东西,例如初始 bool 检查变量以及将 textField.text == "" 切换为 textField.text == nil,但所做的只是两次都没有显示警报框。我尝试过的其他一些事情让我忘记了,但最终结果总是一样的,要么两次都进行,要么两次都出现第二个警报框。所以我被困住了。我将发布代码以便更容易查看我是否完全遗漏了某些内容,如果我的格式不适合这篇文章,或者我的代码没有应有的整洁,我提前道歉。我还是个初学者,边走边学。因此,如果我有一些草率或格式错误的东西,我愿意修复它。感谢您的时间。

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)

}

【问题讨论】:

  • 而不是回答您的问题,我将建议您更改 UI 流程 - 弹出模式警报很烦人 - 用户必须点击以确认它,然后因为您无法阻止 UIAlertController从被解雇后,它将不得不重新显示。虽然工作量更大,但您应该创建自己的视图控制器来管理收集名称的模式对话框;这使您可以更好地控制用户体验,您可以简单地禁用“确定”按钮,直到文本字段具有使用文本字段委托的内容

标签: ios swift uialertcontroller


【解决方案1】:

无论设计如何,只要让您的代码工作:

问题:

 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....
 }

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

【讨论】:

  • 您好 zp_x,谢谢您的回复。所以我按照代码进行操作,当文本字段为空时,它会根据我的需要弹出警告框,但是当我在其中添加一些字符并点击“保存”时,什么也没有发生。塞格不去。有什么建议吗?
  • 让它工作。我用 performSegueWithIdentifier 切换了 shouldPerformSegueWithIdentifier。这是正确的做法吗?
  • @aCertos 是的,你是对的,应该在转换之前调用 shouldPerformSegueWithIdentifier。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2016-11-04
  • 1970-01-01
  • 2021-07-01
  • 2015-12-28
相关资源
最近更新 更多