textField に入力する際に (222) 233-3441 などの電話番号形式を設定しています。ユーザーが 14 文字 (特殊文字を含む) を超えて入力し続けると、すべての特殊文字が削除され、数字のみが表示されます (つまり、222233344188)。また、一部の文字を削除して 14 文字に戻ると、電話番号の形式が再度設定されます。思い通りにできました。しかし、削除中に問題に直面しています。
- 削除中 - 文字数が 10 になるとフォーマットが適用されます。したがって、2222333441 は (222) 233-3441 になります。
- フォーマットが適用され、文字が再び 10 に達するため、ループして削除を続けます。
前に進むために空白になりました。この問題を解決するための貴重な提案を私に押し付けてください。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if(string.length!=0){ //detect backspace
if (textField.text.length == 0)
textField.text = [NSString stringWithFormat:@"(%@",textField.text];
if (textField.text.length == 4)
textField.text = [NSString stringWithFormat:@"%@) ",textField.text];
if (textField.text.length == 9)
textField.text = [NSString stringWithFormat:@"%@-",textField.text];
if (textField.text.length>13){
NSString *value=[NSString stringWithString:textField.text];
textField.text=[[value componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]componentsJoinedByString:@""];
}
}
else{
if(textField.text.length==11){
NSMutableString *text=[NSMutableString stringWithString:textField.text];
[text insertString:@"(" atIndex:0];
[text insertString:@") " atIndex:4];
[text insertString:@"-" atIndex:9];
textField.text=text;
}
}
return YES;
}
ありがとう。