在ios中的textField上设置多个验证

时间:2015-01-09 13:10:56

标签: ios objective-c iphone uitextfield

我正在使用iOS中的应用程序,其中我在页面上使用多个文本字段,我必须为textField.Suppose设置不同的验证,我想要仅输入一个文本字段,而我只想输入数字。我该怎么做任何建议! 我使用下面的代码,但它只处理第一个文本字段。

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range      replacementString:(NSString *)string
{
if (!string.length) 
    return YES;

if (textField == self.tmpTextField)
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";
    NSRegularExpression *regex = [NSRegularExpressionregularExpressionWithPattern:expression 
                                                                           options:NSRegularExpressionCaseInsensitive 
                                                                             error:nil];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                        options:0
                                                          range:NSMakeRange(0, [newString length])];        
    if (numberOfMatches == 0)
        return NO;        
}
return YES;
}

4 个答案:

答案 0 :(得分:1)

使用了文本字段的TAG属性,然后将其区分如下。

ex. set property like this.

    textfielfname.tag =0;
    textfielfemail.tag =1;

    if(textField.tag == 0)
    {
       NSLog(@"First text field");
    }
     else{
           NSLog(@"Second text field");
         }

答案 1 :(得分:1)

#define ACCEPTABLE_CHARACTERS @"0123456789"

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

if ([textField isEqual:zipCode]) {

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return [string isEqualToString:filtered];


}

return YES;

}

答案 2 :(得分:0)

我假设文本Field to only text是:self.tmp文本字段,如果不在此代码中更改它:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                      options:NSRegularExpressionCaseInsensitive
                                                                        error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                                    options:0
                                                      range:NSMakeRange(0, [string length])];

if (numberOfMatches == 0)
{
    if (textField == self.tmpTextField)
    {
        return YES;
    } else {
        return NO;
    }
}
else
{

    if (textField == self.tmpTextField)
    {
        return NO;
    }
    else
    {
        return YES;
    }
}
}

答案 3 :(得分:0)

UITextField的所有委托方法(以及UITextView)都包含指向相关文本字段的指针。

您可以将单独的对象设置为每个文本字段的委托,也可以根据将哪个文本字段传递给委托方法来编写运行不同代码的委托方法。我发现设置单独的对象作为每个文本字段的代理通常比它的价值更麻烦。

要编写处理所有文本字段的委托方法,只需为每个文本字段设置出口。然后,您可以使用switch语句或if语句根据字段进行分支。 (switch语句有效,因为Objective C中的对象指针是一个指针,它是一种标量。你可能必须将它转换为unsigned long,以避免编译器的抱怨。

在标题中:

IBOutlet UITextField *textField1;
IBOutlet UITextField *textField2;
IBOutlet UITextField *textField3;

您可以分别在故事板0,1和2中设置标签。

如果你想以编程方式设置它,那么

textField1.tag = 0;
textField2.tag = 1;
textField3.tag = 2;

在您的.m文件中:

- (BOOL)textField: (UITextField *) textField 
    shouldChangeCharactersInRange: (NSRange) range      
    replacementString: (NSString *) string
{
  switch (textField.tag)
  {
    case 0:
      //Code for textField1
      break;
    case 1:
      //Code for textField2
      break;
    case 2:
      //Code for textField3
      break;
  }
}