后退空间不会删除 - 文本字段中的符号

时间:2011-03-02 09:11:57

标签: iphone objective-c

我需要在文本字段中显示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但它没有删除 - 符号。

我怎样才能将其删除?

4 个答案:

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


}