如何防止用户不删除UITextField中的特定字符



在我的iPhone应用程序中,我希望UITextField有"+"符号默认为手机号码。如果用户想要更改手机号码,那么他/她可以。但是他们不允许从UITextField中删除"+"。"+"符号始终保持在UITextField中。

例如:-

+911234567890 -右号码

911234567890 -打错了。

我尝试使用UITextField委托方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

还使用了通知"UIControlEventEditingChanged"。

试试这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *head= [textField.text substringToIndex:range.location];
NSString *tail= [textField.text substringFromIndex:range.location];
NSString *phoneNumber = [NSString stringWithFormat:@"%@%@%@",head,string,tail];
if ([string isEqualToString:@""]) {
    NSString *deleteString = [tail substringToIndex:1];
    if ([deleteString isEqualToString:@"+"]) {
        return NO;
    }
}else if(![self isValidPhoneNumber:phoneNumber]){
    return NO;
}
return YES;
}

通过正则表达式检查有效的电话号码

-(BOOL)isValidPhoneNumber:(NSString*)phoneNumber{
NSString *phoneNumberPattern = @"[+]([0-9])*";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneNumberPattern];
BOOL match = [predicate evaluateWithObject:phoneNumber];
if (match) {
    NSLog(@"VALID");
    return YES;
}else{
    NSLog(@"INVALID");
}
return NO;
}

禁止在第一个字符之前或之后添加任何字符:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    return range.location == 0 && (range.length == 0 || range.length == 1) ? NO : YES;
}

试试这个。这里我使用左填充到UITextField。txtf是我的UITextField。

UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(5, 0, 15, 30)];
lbl.textAlignment=NSTextAlignmentCenter;
[lbl setText:@"+"];
_txtf.leftView=lbl;
[_txtf setLeftViewMode:UITextFieldViewModeAlways];

最新更新