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

标签 ios objective-c iphone notifications uitextfield

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

例如:-

+911234567890 - 正确的号码

911234567890 - 号码错误。 + 为必填项。

我尝试使用 UITextField 委托(delegate)方法

- (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;
}

关于ios - 如何防止用户不删除 UITextField 中的特定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078314/

相关文章:

iphone - UIApplication openUrl 不适用于格式化的 NSString

objective-c - 不断替换数组中的对象是否存在任何问题?

iphone - UIWebView Controller 的问题

ios - 将 iOS 7 SDK 与 llvm-gcc-4.2 一起使用

ios - 如何使用 AFnetworking 或 NSJsonserialization 发布 json 数据

objective-c - Corefoundation CFArray 所有权

objective-c - 如何按字符串中的每个字符拆分 NSString?

iphone - 做Iphone开发时的软件开发方法论

ios - 使用 UIImagePickerController 加载图像的纵横比

ios - Firebase 数据库在模拟器和真实设备中没有响应