具有输入格式的 UItextfield
UItextfield with Input format
我有 2 个问题
1) 如果文本字段输入 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;
}
请查看我的回答
- (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];
}
}
试试下面的代码:
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;
}
您正在检查文本字段的旧文本长度。
if ((textField.text.length >= 4) && (string.length > 0))
应该是
if ((string.length >= 4) && (string.length > 0))
这应该可以解决这两个问题。
我有 2 个问题
1) 如果文本字段输入 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;
}
请查看我的回答
- (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];
}
}
试试下面的代码:
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;
}
您正在检查文本字段的旧文本长度。
if ((textField.text.length >= 4) && (string.length > 0))
应该是
if ((string.length >= 4) && (string.length > 0))
这应该可以解决这两个问题。