限制UITextField中的字符数

3

我看到了很多答案,但似乎没有一个有效。我有一个通过程序创建的UIAlertView,其中包含两个UITextFields。我想限制字符数:

  • 第一个字段最多12个字符
  • 第二个字段最多1个字符

第一个字段代码:

alertDialog.addTextField { (nameField) in
        nameField.placeholder = "Name"
        nameField.borderStyle = .roundedRect
        nameField.clearButtonMode = .whileEditing
        }

第二点
alertDialog.addTextField { (keyField) in
        keyField.placeholder = "Key"
        keyField.borderStyle = .roundedRect
        keyField.clearButtonMode = .whileEditing

    }

我该如何正确限制这些字段中的数字数量(假装这些字段中不会有粘贴)?


你在添加一个textField的代理吗? - Abizern
不,目前还不行。我尝试了几次但都失败了。你能帮我一下吗? :) - Олег Місько
@Tj3n,是的!这个方法可行!非常感谢你。我以前没有遇到过这种问题。抱歉。 - Олег Місько
2个回答

6

将textField的代理设置为相应的类(在我的情况下,self是ViewController)

nameField.delegate = self
keyField.delegate = self

那么,您可以通过以下方式限制字符:

extension ViewController : UITextFieldDelegate {

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

        switch textField {
        case nameField:
            if ((textField.text?.length)! + (string.length - range.length)) > 12 {
                return false
            }

        case keyField:
            if ((textField.text?.length)! + (string.length - range.length)) > 1 {
                return false
            }
        }
        return true 
    }
}

0
您可以像这样添加事件:
textField1.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)
textField2.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)

然后实现这个函数:

func textFieldDidChange(textField: UITextField) {
    if textField == self.textField1 && textField.text.length > 12 { 
        // Do whaterver you want
    }
    if textField == self.textField2 && textField.text.length > 1 { 
        // Do whaterver you want
    }
}

有没有其他的方法来做这件事? - shaqir saiyed
请参考@Vinupriya Arivazhagan的答案。 - Jimmy James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接