ios - 在 Swift 中设置 UITextField 的最大字符长度

标签 ios string swift uitextfield character

我知道还有其他关于此的主题,但我似乎无法找到如何实现它。

我试图将 UITextField 限制为仅五个字符。

最好是字母数字、-._

我看过这段代码:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
                       replacementString string: String) -> Bool
{
    let maxLength = 4
    let currentString: NSString = textField.text
    let newString: NSString =
             currentString.stringByReplacingCharactersInRange(range, withString: string)
    return newString.length <= maxLength
}

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

    let length = count(textField.text.utf16) + count(string.utf16) - range.length
    return length <= 10
}

我如何实际实现它?我应该用自定义命名的 UITextField 换掉哪个“文本字段”?

最佳答案

  1. 您的 View Controller 应符合 UITextFieldDelegate,如下所示:

    class MyViewController: UIViewController, UITextFieldDelegate {
    
    }
    
  2. 设置文本框的代理:myTextField.delegate = self

  3. 在您的 View Controller 中实现该方法:

    textField(_:shouldChangeCharactersInRange:replacementString:)
    

一起:

class MyViewController: UIViewController, UITextFieldDelegate  // Set delegate to class

@IBOutlet var mytextField: UITextField             //  textfield variable

override func viewDidLoad() {
    super.viewDidLoad()
    mytextField.delegate = self                  // set delegate
}


func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
                       replacementString string: String) -> Bool
{
    let maxLength = 4
    let currentString: NSString = textField.text
    let newString: NSString =  currentString.stringByReplacingCharactersInRange(range, withString: string)

    return newString.length <= maxLength
}

对于 Swift 4

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let maxLength = 1
    let currentString: NSString = (textField.text ?? "") as NSString
    let newString: NSString =  currentString.replacingCharacters(in: range, with: string) as NSString

    return newString.length <= maxLength
}

对于 Swift 5

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let maxLength = 1
    let currentString = (textField.text ?? "") as NSString
    let newString = currentString.replacingCharacters(in: range, with: string)

    return newString.count <= maxLength
}

只允许在给定的文本字段中输入一组指定的字符

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    var result = true

    if mytextField == textField {
        if count(string) > 0 {
            let disallowedCharacterSet = NSCharacterSet(charactersInString: "0123456789.-").invertedSet
            let replacementStringIsLegal = string.rangeOfCharacterFromSet(disallowedCharacterSet) == nil
            result = replacementStringIsLegal
        }
    }

    return result
}

How to program an iOS text field that takes only numeric input with a maximum length

关于ios - 在 Swift 中设置 UITextField 的最大字符长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363216/

相关文章:

ios - 使用 ARC 和 block 时保留循环

c - 还有另一种截断字符串的方法吗?

java - 如何使用 or ||... 比较字符串

ios - 在哪里可以找到选项卡栏 Controller 类?

ios - 使用 Swift,在 iOS 中标题位于顶部和右侧的 Collection View

ios - Xcodebuild 以不同语言运行应用程序单元测试

ios - 是否有 UIImagePickerController 替代品,我可以从已经在弹出窗口中的 Controller 使用?

iphone - iOS 中的色轮或颜色选择器

java - 如何将字符串(通过匹配一组正则表达式)拆分为标记并在 JAVA 中打印每个标记?

swift - 在 swift 4 或更高版本上创建触摸测试应用程序