如何检测 UITextField 中的数字长度?
How to detect number length in UITextField?
有一个名为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 个数字时,它会自动调用下一个函数,但是第 8 个数字没有显示在 UITextField 中。
如果把self.numbercontent.text.length == 7
改成self.numbercontent.text.length > 7
,UITextField中显示第8个数字,但我需要再输入一个数字才能调用下一个函数,请问如何解决这个bug,谢谢。
试试这个,而不是 shouldChangeCharactersInRange
,
[_txtNum addTarget:self action:@selector(didChangeText:) forControlEvents:UIControlEventEditingChanged];
然后添加这个方法,
-(void)didChangeText:(UITextField*)sender
{
if(sender.text.length==8)
{
[self stopFly];
[self.txtNum resignFirstResponder];
}
}
虽然@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
}
使用这个。
- (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;
}
有一个名为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 个数字时,它会自动调用下一个函数,但是第 8 个数字没有显示在 UITextField 中。
如果把self.numbercontent.text.length == 7
改成self.numbercontent.text.length > 7
,UITextField中显示第8个数字,但我需要再输入一个数字才能调用下一个函数,请问如何解决这个bug,谢谢。
试试这个,而不是 shouldChangeCharactersInRange
,
[_txtNum addTarget:self action:@selector(didChangeText:) forControlEvents:UIControlEventEditingChanged];
然后添加这个方法,
-(void)didChangeText:(UITextField*)sender
{
if(sender.text.length==8)
{
[self stopFly];
[self.txtNum resignFirstResponder];
}
}
虽然@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
}
使用这个。
- (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;
}