Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何禁用此“完成”按钮,直到这两个文本字段有值为止?_Swift_Button_Tableview - Fatal编程技术网

Swift 如何禁用此“完成”按钮,直到这两个文本字段有值为止?

Swift 如何禁用此“完成”按钮,直到这两个文本字段有值为止?,swift,button,tableview,Swift,Button,Tableview,我的目标是在这两个文本字段都为空时禁用“完成”按钮。我有顶部按钮的逻辑,但只要顶部文本字段“taskNameTextFIeld”至少有一个字符,则会启用“完成”按钮。我不希望用户能够在“timeTextField”为空时按done。您可以在textField()中看到到目前为止的内容 问题是您没有同时检查两个字段。更改: doneBarButton.isEnabled = newText.length > 0 要对事物进行实际检查: if taskNameTextFIeld.text.

我的目标是在这两个文本字段都为空时禁用“完成”按钮。我有顶部按钮的逻辑,但只要顶部文本字段“taskNameTextFIeld”至少有一个字符,则会启用“完成”按钮。我不希望用户能够在“timeTextField”为空时按done。您可以在textField()中看到到目前为止的内容


问题是您没有同时检查两个字段。更改:

doneBarButton.isEnabled = newText.length > 0
要对事物进行实际检查:

if taskNameTextFIeld.text.length > 0 && timeTextFIeld.text.length > 0 {
    doneBarButton.isEnabled = newText.length > 0
}

另外,我建议将这两个文本字段的名称更改为
字段
,而不是
字段

以下是我如何解决该问题的一些细节。文本字段本身没有长度成员,所以我比较了字符数

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let oldText = textField.text! as NSString
    let newText = oldText.replacingCharacters(in: range, with: string) as NSString
    //doneBarButton.isEnabled = newText.length > 0
    if (taskNameTextFIeld.text?.characters.count)! > 0 && (timeTextFIeld.text?.characters.count)! > 0 {
        doneBarButton.isEnabled = newText.length > 0
    }
    return true
}

实际发生了什么?当我填写顶部文本字段时,doneBarButton变为启用状态,我需要它保持禁用状态,直到两个字段都输入了文本。此代码在shouldchangeCharacters方法中无法正常工作。我这样做了,但我仍然有相同的问题。我还使用了
(taskNameTextFIeld.text?.characters.count)!>0
,因为文本字段没有长度成员。也谢谢你指出我自己的打字错误,因为我修正了它,它现在正在工作,谢谢你的帮助!
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let oldText = textField.text! as NSString
    let newText = oldText.replacingCharacters(in: range, with: string) as NSString
    //doneBarButton.isEnabled = newText.length > 0
    if (taskNameTextFIeld.text?.characters.count)! > 0 && (timeTextFIeld.text?.characters.count)! > 0 {
        doneBarButton.isEnabled = newText.length > 0
    }
    return true
}