我需要在文本字段中显示123-456-7890中的手机号码。为此,我使用此代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *numSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789-"];
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
int charCount = [newString length];
if ([newString rangeOfCharacterFromSet:[numSet invertedSet]].location != NSNotFound
|| [string rangeOfString:@"-"].location != NSNotFound
|| charCount > 12) {
return NO;
}
if (charCount == 3 || charCount == 7) {
newString = [newString stringByAppendingString:@"-"];
}
textField.text = newString;
return NO;
}
它工作正常,但我有问题, 例如,我需要显示手机号码1234567890,如123-456-7890。
我输入了123-456,错误地我输入了错误的值然后修改它退格删除456但它没有删除 - 符号。
我怎样才能将其删除?
答案 0 :(得分:3)
可能不是一个完整的解决方案,但是应该有效的快速黑客 - 您可以随时让用户删除任何字符(或子字符串),因此请尝试在方法的开头添加以下条件:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([string length] == 0)
return YES; // deleting is always OK - returning YES
...
答案 1 :(得分:0)
总是从方法中返回NO,这意味着在所有情况下,您都不允许textField通过其内部逻辑更新文本,但是您使用最终语句强制它
textField.text=newString;
这种方法是正确的,但您的代码包含错误。
事实上,假设您当前的文本字段字符串为“123-”,只要您键入退格键,代表就会被要求将“123-”替换为“123”。 但是在你的代码中,你检查如果newString的长度为3,那么你追加一个额外的“ - ”。 因此,只要您键入退格键以删除“ - ”,您的代码就会用额外的“ - ”替换它。 在我看来,要修复它,你应该检查textField.text长度是否为>比newString。如果是这样,那么你是“删除”然后你不进行charCount == 3检查,而如果textField.text长度< newString length,然后输入字符,你可以进行检查。
答案 2 :(得分:0)
我希望我们能够这样做:
NSMutableString *phoneNumber = [NSMutableString stringWithFormat:@"%@", textField.text];
[phoneNumber replaceOccurrencesOfString:@"-" withString:@"" options:NSBackwardsSearch range:NSMakeRange(0,[phoneNumber length])];
if([phoneNumber length] >=7) {
[phoneNumber insertString:@"-" atIndex:7];
}
if([phoneNumber length] >=3) {
[phoneNumber insertString:@"-" atIndex:3];
}
textField.text = phoneNumber;
答案 3 :(得分:0)
-(NSString*)formatNumber:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
NSLog(@"%@", mobileNumber);
int length = [mobileNumber length];
if(length > 10)
{
mobileNumber = [mobileNumber substringFromIndex: length-10];
NSLog(@"%@", mobileNumber);
}
return mobileNumber;
}
-(int)getLength:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
return length;
}