如何检测 UITextField 中的数字长度?

Posted

技术标签:

【中文标题】如何检测 UITextField 中的数字长度?【英文标题】:How to detect number length in UITextField? 【发布时间】:2018-04-11 15:53:03 【问题描述】:

有一个名为numbercontent的UITextField,输入8个数字后会自动调用下一个函数。以下是我的代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
 if (self.numbercontent.text.length == 7) 
  [self.numbercontent resignFirstResponder];
  [self stopFly];
 
 return YES;

但是有一个错误

当我输入第8个数字时,它会自动调用next函数,但是第8个数字没有显示在UITextField中。

如果将self.numbercontent.text.length == 7更改为self.numbercontent.text.length > 7,UITextField中会显示第8个数字,但我需要再输入一个数字才能调用下一个函数,如何解决这个错误,谢谢。

【问题讨论】:

这个功能就像用密码解锁iPhone 【参考方案1】:

试试这个,而不是shouldChangeCharactersInRange

[_txtNum addTarget:self action:@selector(didChangeText:) forControlEvents:UIControlEventEditingChanged];

然后添加这个方法,

-(void)didChangeText:(UITextField*)sender

    if(sender.text.length==8)
    
        [self stopFly];
        [self.txtNum resignFirstResponder];
    

【讨论】:

非常感谢。【参考方案2】:

虽然@DhavalBhimani 建议的答案是处理此问题的标准方法,但替代方法可以与当前方法一起使用,例如:

在 Objective-C 中:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    NSString *updatedString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if (textField.text.length == 7) 
        textField.text = updatedString;
        [textField resignFirstResponder];
        [self stopFly];
    
    return YES;

在 Swift 4.0 中:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    let updatedString = (textField.text as NSString?)?.replacingCharacters(in: range, with: string)
    if textField.text?.count == 7 
        textField.text = updatedString
        self.view.endEditing(true)
    
    return true

【讨论】:

【参考方案3】:

使用这个。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string


// _textLenghtLimit = your text max lenght
    if (_textLenghtLimit > 0) 
        if ((range.location >= _textLenghtLimit || textField.text.length + 1 > _textLenghtLimit) && range.length == 0) 
            return NO;
        
    
    return YES;

【讨论】:

以上是关于如何检测 UITextField 中的数字长度?的主要内容,如果未能解决你的问题,请参考以下文章

输入四个字符后如何编写UItextfield长度和更改键盘数字格式的条件

将逗号添加到数字值作为UITextField中的用户类型

最大长度 UITextField

如何使键盘 UITextField 中的数字视图成为默认值?

如何在 swift 2.0 中只允许 UITextfield 中的某些数字集

检测UITextField的焦点更改