我有2个问题
1)如果textfield输入10位数,在点击第10位后调用一个函数(myFunction),我有下面的代码来修复长度为10位的数字,当我按下第11位数字时代码工作正常。
#define MAX_LENGTH 10
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.text.length >= MAX_LENGTH && range.length == 0)
{
[self myFunction];//not working it works when 11th time key is press
return NO; // return NO to not change text
}
return YES;
}
-(void) myFunction
{
// do my stuff here
}
2)我的第二个问题是关于具有多个文本字段的信用卡输入格式。 我有3个文本字段,其中我必须输入4位数,下面是我的代码工作正常,但它也可以按下第5次(如更改文本框)
在viewDidLoad
中self.txt_box1.tag=1;
self.txt_box2.tag=2;
self.txt_box3.tag=3;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ((textField.text.length >= 4) && (string.length > 0))
{
NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
if (! nextResponder)
{
[nextResponder resignFirstResponder];
[self myFunction];
}
if (nextResponder)
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
return NO;
}
return YES;
}
答案 0 :(得分:1)
请检查我的回答
- (void)viewDidLoad
{
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField.text.length > MAX_LENGTH)
{
textField.text = [textField.text substringToIndex:MAX_LENGTH];
}
}
答案 1 :(得分:1)
尝试以下代码:
NSString* fullString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (fullString.length >= MAX_LENGTH)
{
[self myFunction];//not working it works when 11th time key is press
return NO; // return NO to not change text
}
return YES;
#2相同。
NSString* fullString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (fullString.length > 4)
{
// any code
return NO;
}
return YES;
}
答案 2 :(得分:1)
您正在检查文本字段的旧文本长度。
if ((textField.text.length >= 4) && (string.length > 0))
应该是
if ((string.length >= 4) && (string.length > 0))
这应该可以解决这两个问题。