在自定义TableViewCell中的UITextField中自动在预定义位置添加特定单词

时间:2013-05-25 07:41:05

标签: uitableview uitextfield

我正在研究项目 有一个电话号码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;

}

2 个答案:

答案 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;

}