首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速验证UITextField

快速验证UITextField
EN

Stack Overflow用户
提问于 2015-07-18 20:18:06
回答 6查看 49K关注 0票数 7

我在我的应用程序中有以下几个入口:

代码语言:javascript
复制
@IBOutlet var name1: UITextField!

@IBOutlet var name2: UITextField!

@IBOutlet var name3: UITextField!

@IBOutlet var name4: UITextField!

@IBOutlet var newButton: UIButton!

我想做的是:

每当用户在这四个UITextField中输入某一项或删除某项内容时,我想检查是否有任何UITextField为空。

如果任何UITextField为空,则应禁用该按钮。

如果设置了所有UITextField(而不是空的),则应该启用按钮。

我的代码:

代码语言:javascript
复制
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    setButton()

    return true
}

func setButton() {

    let inputValid = checkInput()

    if inputValid {

        newButton.enabled = true

    } else {

        newButton.enabled = false

    }

}

func checkInput() -> Bool {

    let name1Value = name1.text
    let name2Value = name2.text
    let name3Value = name3.text
    let name4Value = name4.text

    if !name1Value.isEmpty && !name2Value.isEmpty && !name3Value.isEmpty && !name4Value.isEmpty {

        return true

    }

    return false

}

好的,它现在能工作50%。

当我在每个UITextField中键入一个字符时,按钮仍然是禁用的。

当我在任何UITextField中添加第二个按钮时,按钮会被启用等等.

有人能帮我吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-18 21:47:26

或者,您也可以使用它,每次按下键时都会调用它:

代码语言:javascript
复制
name1.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
name2.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
name3.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
name4.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)


func textFieldDidChange(textField: UITextField) {
    if name1.text?.isEmpty || name2.text?.isEmpty || name3.text?.isEmpty || name4.text?.isEmpty {
        //Disable button
    } else {
        //Enable button
    }
}
票数 16
EN

Stack Overflow用户

发布于 2018-03-19 16:56:43

Swift 4 --以下是我如何解决这个问题,以避免冗长的条件--这也将允许您对每个文本字段进行实时验证,与公认的答案不同,您可以根据用户输入的内容更新UI。

代码语言:javascript
复制
let textfields : [UITextField] = [name1, name2, name3, name4]
for textfield in textfields {
  textfield.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}


@objc func textFieldDidChange(_ textField: UITextField) {
  //set Button to false whenever they begin editing
  yourButton.isEnabled = false
  guard let first = textFields[0].text, first != "" else {
        print("textField 1 is empty")
        return
    }
    guard let second = textFields[1].text, second != "" else {
        print("textField 2 is empty")
        return
    }
    guard let third = textFields[2].text, third != "" else {
        print("textField 3 is empty")
        return
    }
    guard let forth = textFields[3].text, forth != "" else {
        print("textField 4 is empty")
        return
    }
    // set button to true whenever all textfield criteria is met.
    yourButton.isEnabled = true

}
票数 9
EN

Stack Overflow用户

发布于 2015-07-18 20:48:05

在文本字段的内容发生更改之前,会调用textField:shouldChangeCharactersInRange: method。

您应该对当前文本字段进行特殊处理,并在编辑后确定它的新内容是否为空白。

就像这样:

代码语言:javascript
复制
textField.text.length > range.length - replacementString.length

(这是我的头绪,没有被调试过。此外,您还必须想出确保所有其他字段都是非空白的逻辑,并使用上面的逻辑测试当前字段的内容。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31495188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档