如何防止用户不删除 UITextField 中的特定字符?
How to prevent user not to remove particular character in UITextField?
在我的 iPhone 应用程序中,我希望 UITextField 默认为手机设置“+”符号 number.If 用户想要更改手机号码然后 he/she 可以。但他们不允许从 UITextField 中删除“+”。 “+”符号始终保持在 UITextField 中。
例如:-
+911234567890 - 右数
911234567890 - 号码错误。 + 为必填项。
我尝试使用 UITextField 委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
并且还使用了通知“UIControlEventEditingChanged”。
提前致谢。
试试这个。在这里,我对 UITextField 使用左填充。 txtf 是我的 UITextField。
UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(5, 0, 15, 30)];
lbl.textAlignment=NSTextAlignmentCenter;
[lbl setText:@"+"];
_txtf.leftView=lbl;
[_txtf setLeftViewMode:UITextFieldViewModeAlways];
试试这个。
- (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;
}
通过正则表达式检查有效的phone号码
-(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;
}
在我的 iPhone 应用程序中,我希望 UITextField 默认为手机设置“+”符号 number.If 用户想要更改手机号码然后 he/she 可以。但他们不允许从 UITextField 中删除“+”。 “+”符号始终保持在 UITextField 中。
例如:-
+911234567890 - 右数
911234567890 - 号码错误。 + 为必填项。
我尝试使用 UITextField 委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
并且还使用了通知“UIControlEventEditingChanged”。
提前致谢。
试试这个。在这里,我对 UITextField 使用左填充。 txtf 是我的 UITextField。
UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(5, 0, 15, 30)];
lbl.textAlignment=NSTextAlignmentCenter;
[lbl setText:@"+"];
_txtf.leftView=lbl;
[_txtf setLeftViewMode:UITextFieldViewModeAlways];
试试这个。
- (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;
}
通过正则表达式检查有效的phone号码
-(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;
}