在iOS中检测退格按下
我正在尝试验证在UITextfield中输入的10位电话号码。实际上我需要xxx xxx xxxx格式的号码。所以我不希望用户删除-symbol 我尝试使用这里提到的各种方法,但似乎都不起作用 我目前的做法是:在iOS中检测退格按下,ios,uitextfield,Ios,Uitextfield,我正在尝试验证在UITextfield中输入的10位电话号码。实际上我需要xxx xxx xxxx格式的号码。所以我不希望用户删除-symbol 我尝试使用这里提到的各种方法,但似乎都不起作用 我目前的做法是: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (range.lo
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (range.location == 12) {
UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Invalid Input" message:@"Phone number can contain only 10 digits." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[testTextField resignFirstResponder];
return NO;
}
if (range.length == 0 && [blockedCharacters characterIsMember:[string characterAtIndex:0]]) {
UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Invalid Input" message:@"Please enter only numbers.\nTry again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return NO;
}
if (range.length == 0 &&
(range.location == 3 || range.location == 7)) {
textField.text = [NSString stringWithFormat:@"%@-%@", textField.text, string];
return NO;
}
if (range.length == 1 &&
(range.location == 4 || range.location == 8)) {
range.location--;
range.length = 2;
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
return YES;
}
有什么想法吗
非常感谢。我遇到了类似的问题,如: 我知道你需要在里面的数字像xxx xxx xxxx 我就是这样解决的:
-(void)textFieldDidEndEditing:(UITextField *)textField{
if (self.tf == textField) {
NSMutableString *stringtf = [NSMutableString stringWithString:self.tf.text];
[stringtf insertString:@"-" atIndex:2];
[stringtf insertString:@"-" atIndex:5];
tf.text = stringDID;
}
}
因此,一旦用户编辑完号码,我就为他们添加-了。我遇到了类似的问题,如下所示: 我知道你需要在里面的数字像xxx xxx xxxx 我就是这样解决的:
-(void)textFieldDidEndEditing:(UITextField *)textField{
if (self.tf == textField) {
NSMutableString *stringtf = [NSMutableString stringWithString:self.tf.text];
[stringtf insertString:@"-" atIndex:2];
[stringtf insertString:@"-" atIndex:5];
tf.text = stringDID;
}
}
因此,一旦用户编辑完号码,我就为他们添加-for.子类
UITextField
类并覆盖-(void)deleteBackward
然后,您将收到键盘上每次按退格键的消息。别忘了在函数开始时调用super
例如:
- (void)deleteBackward
{
[super deleteBackward];
[self.delegate deleteTapped:self];
}
子类
UITextField
类和重写-(void)deleteBackward
然后,您将收到键盘上每次按退格键的消息。别忘了在函数开始时调用super
例如:
- (void)deleteBackward
{
[super deleteBackward];
[self.delegate deleteTapped:self];
}
此代码可能提供一些线索:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField.tag==txtYourTextField.tag) {
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
NSLog(@"isBackSpace");
return YES; // is backspace
}
else if (textField.text.length == 10) {
return YES;
}
}
return NO; }
此代码可能提供一些线索:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField.tag==txtYourTextField.tag) {
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
NSLog(@"isBackSpace");
return YES; // is backspace
}
else if (textField.text.length == 10) {
return YES;
}
}
return NO; }
试试这个。我在这里做的基本上是检查是否有一个空的键点击,这表示退格。然后,我们检查最后两个字符,看看它是否包含“-”,如果是,我们将两者都删除。然后返回NO,因为我们自己处理退格。我没有实际运行代码,但理论上应该可以运行。这意味着像“123-456-7”这样的数字最终会像“123-456”。您可以调整逻辑以满足您的需要。干杯
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([string isEqualToString:@""] && [textField.text length] > 3)
{
NSString *lastChars = [textField.text substringFromIndex:[textField.text length] - 2];
if([lastChars rangeOfString:@"-"].location != NSNotFound)
{
NSString *newString = [textField.text substringToIndex:[textField.text length] - 2];
[textField setText:newString];
return NO;
}
}
return YES;
}
试试这个。我在这里做的基本上是检查是否有一个空的键点击,这表示退格。然后,我们检查最后两个字符,看看它是否包含“-”,如果是,我们将两者都删除。然后返回NO,因为我们自己处理退格。我没有实际运行代码,但理论上应该可以运行。这意味着像“123-456-7”这样的数字最终会像“123-456”。您可以调整逻辑以满足您的需要。干杯
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([string isEqualToString:@""] && [textField.text length] > 3)
{
NSString *lastChars = [textField.text substringFromIndex:[textField.text length] - 2];
if([lastChars rangeOfString:@"-"].location != NSNotFound)
{
NSString *newString = [textField.text substringToIndex:[textField.text length] - 2];
[textField setText:newString];
return NO;
}
}
return YES;
}
由于上述问题中的解决方案不起作用,因此可能重复投票关闭。但是,您实际上并不想实现退格,您只想检查文本字段的内容。为什么不让用户根据需要输入数字,然后在编辑结束后应用您的格式对其进行修改?我必须问:“但它们似乎都不起作用”是什么意思?代码的最后一部分看起来很合理。您看到的问题是什么?是的,apascua建议的解决方案似乎对我有效。可能重复投票关闭,因为上述问题中的解决方案确实有效。但是,您实际上并不想实现退格,您只想检查文本字段的内容。为什么不让用户根据需要输入数字,然后在编辑结束后应用您的格式对其进行修改?我必须问:“但它们似乎都不起作用”是什么意思?代码的最后一部分看起来很合理。你看到的问题是什么?是的,apascua建议的解决方案似乎对我有效。这正是我所说的。谢谢。但我最初的问题仍然没有答案。有什么方法可以阻止用户删除-符号吗?这正是我所说的。谢谢。但我最初的问题仍然没有答案。是否有任何方法可以阻止用户删除-符号?