0

我正在做项目有一个电话号码文本字段。我想添加电话号码,例如 (123)123-1234 当用户点击 textField 时,它会自动添加“(”并且在三个数字之后自动添加“)”然后在三个数字之后添加“-”然后在 4 个数字文本字段之后不允许任何进一步的数字相加

这是我正在尝试使用的代码

但是当我尝试删除它停留在“-”的数字时出现了一个问题

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

if (textField == _phoneNumberTextFieldPersonalData) { NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string]; if (text.length == 1 ) { //or probably better, check if int textField.text = [NSString stringWithFormat: @"(%@", text]; return NO; } else if (text.length == 4) { textField.text = [NSString stringWithFormat: @"%@)", text]; return NO; } else if (text.length == 8) { textField.text = [NSString stringWithFormat: @"%@-", text]; return NO; } else if (text.length >= 14) { [textField resignFirstResponder]; return NO; } } return YES;

}

4

2 回答 2

0

UITextField 可以发送各种通知,您可以在UITextField 类参考的末尾找到这些通知。通过收听这些,您可以更改textUITextField 的属性以使其行为符合您的要求。

要将自己添加为通知的观察者,请使用

[[NSNotificationCenter defaultCenter] addObserver:observer
                                         selector:@selector(handleTextFieldChange:)
                                             name:UITextFieldTextDidChangeNotification
                                           object:textField]

(这些参数只是一个示例,请更改它们以适合您的应用程序。)

确保观察者(通常self但可以是任何对象)具有

- (void)handleTextFieldChange:(NSNotification *)note {
    //handle the change here
}

方法。现在,每次 textField 发出 a 时都会调用此方法,UITextFieldTextDidChangeNotification每次用户更改 textField 中的文本时都会发生这种情况。

收听通知可以帮助您根据需要格式化 textField 中的文本。

编辑:不要忘记删除自己作为观察者使用

[[NSNotificationCenter defaultCenter] removeObserver:someObserver 
                                                name:UITextFieldTextDidChangeNotification
                                              object:textField];

完成后。一个很好的地方是在dealloc观察者的方法中。

于 2013-05-25T11:01:59.337 回答
0

我已经这样解决了,而且效果很好

只是我添加了一个检查 if 来检查我是添加文本还是删除它,所以它可以工作

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"string Length %d",string.length);

if([string length]>0) { int ascii=[string characterAtIndex:0]; if ([_phoneNumberTextFieldPersonalData isEqual:textField]){ if(ascii>=48&&ascii<=57) { int length = [self getLength:textField.text]; NSLog(@"Length = %d ",length); if(length == 10) { if(range.length == 0) return NO; } if(length == 3) { NSString *num = [self formatNumber:textField.text]; textField.text = [NSString stringWithFormat:@"(%@) ",num]; if(range.length > 0) textField.text = [NSString stringWithFormat:@"%@",[num substringToIndex:3]]; } else if(length == 6) { NSString *num = [self formatNumber:textField.text]; //NSLog(@"%@",[num substringToIndex:3]); //NSLog(@"%@",[num substringFromIndex:3]); textField.text = [NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]]; if(range.length > 0) textField.text = [NSString stringWithFormat:@"(%@)%@",[num substringToIndex:3],[num substringFromIndex:3]]; } return YES; } else return NO; } } return YES;

}

于 2013-05-27T10:13:12.230 回答