强制小写 - ios swift

Force lowercase - ios swift

我想在用户输入时在 UITextfield 中强制小写。 到目前为止,我已经用这段代码出来了,但它似乎并没有降低字符数。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if string.characters.count == 0 {
        return true
    }

    let currentText = textField.text ?? ""
    let prospectiveText = (currentText as NSString).stringByReplacingCharactersInRange(range, withString: string.lowercaseString)

    switch textField {
    // Allow only lower-case vowels in this field,
    // and limit its contents to a maximum of 6 characters.
    case userNameTextField:
        return prospectiveText.characters.count <= 27
    default:
        return true
    }
}

首先,您应该在文本字段上设置以下 属性 以限制自动大写:

textfield.autocapitalizationType = UITextAutocapitalizationType.None

这是进一步限制它的方法:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {

    if let _ = string.rangeOfCharacterFromSet(NSCharacterSet.uppercaseLetterCharacterSet()) {
        // Do not allow upper case letters
        return false
    }

    return true
}

更新 SWIFT 4

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if let _ = string.rangeOfCharacter(from: .uppercaseLetters) {
        // Do not allow upper case letters
        return false
    }

    return true
}

您可以这样做,并在发生变化时将整个字符串小写。

textfield.addTarget(self, action: "textViewChanged", forControlEvents: .EditingChanged);


  func textViewChanged(){
        textfield.text = textfield.text?.lowercaseString;
    }

对于swift3个用户,以上Abhinav给出的代码只是转换成下面的

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if let _ = string.rangeOfCharacter(from:NSCharacterSet.uppercaseLetters) {

        return false
    }

    return true
}

如果您想将所有输入字符转换为小写,您应该执行此代码:

Swift 4:

override func viewDidLoad()中添加:

 textfield.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: UIControlEvents.editingChanged)

然后将此功能添加到您的 class:

@objc func textFieldDidChange(_ textField: UITextField) {
        if let text:String = textfield.text {
            DispatchQueue.main.async {
                self.textfield.text = text.lowercased()
            }
        }

}

需要在主线程中修改。