我正在研究项目 有一个电话号码textField。我想添加电话号码,如(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;
}
答案 0 :(得分:0)
UITextField可以发送各种通知,您可以在UITextField Class Reference结束时找到这些通知。通过监听这些,您可以更改UITextField的text
属性,使其表现得如您所愿。
要将自己添加为通知的观察者,请使用
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(handleTextFieldChange:)
name:UITextFieldTextDidChangeNotification
object:textField]
(参数只是一个例子,根据您的应用更改它们。)
确保观察者(通常为self
但可以是任何对象)具有
- (void)handleTextFieldChange:(NSNotification *)note {
//handle the change here
}
方法。现在,每次textField发出UITextFieldTextDidChangeNotification
时都会调用此方法,每次用户更改textField中的文本时都会发生这种情况。
收听通知可以帮助您根据需要格式化textField中的文本。
编辑:不要忘记使用
将自己移除为观察者[[NSNotificationCenter defaultCenter] removeObserver:someObserver
name:UITextFieldTextDidChangeNotification
object:textField];
完成后放置它的好地方是观察者的dealloc
方法。
答案 1 :(得分:0)
我已经像这样解决了它并且它完美无缺
我简单地添加了一个检查if 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;
}