在iOS中免除一些委托方法

时间:2014-08-15 12:31:30

标签: ios objective-c iphone delegates

我遇到了委托问题,我在故事板中有3个不同的TextField,

  1. 名称 - (IBOutlet - txtName)
  2. 电话号码 - (IBOutlet - txtPhone)
  3. 电子邮件 - (IBOutlet - txtEmail)
  4. 我正在尝试,限制用户在键入名称时不键入数字,对于电话号码相同,要限制用户不要键入除数字以外的字符。

    所以我正在尝试使用委托方法:

    self.txtName.delegate = self;
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
    replacementString:(NSString *)string
    {
        NSString *charOnly = [[string componentsSeparatedByCharactersInSet:
                                  [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]]
                                 componentsJoinedByString:@""];
        return [string isEqualToString:charOnly];
    }
    

    但我希望两个字段 - 姓名和电话号码都限制在同一表格上。所以如果

    self.txtPhone.delegate = self 
    

    在键入时调用shouldChangeCharactersInRange,仅限于字母表。

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
    replacementString:(NSString *)string
    {
        NSString *numOnly = [[string componentsSeparatedByCharactersInSet:
                                  [[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]]
                                 componentsJoinedByString:@""];
        return [string isEqualToString:numOnly];
    }
    

    正如我在jQuery中所做的那样,将类名分配给字段并按以下方式实现:

    <input type='text' class='numValid'>
    $(".numValid").keypress(function(event) 
    {
    });
    <input type='text' class='nameValid'>
    $(".nameValid").keypress(function(event) 
    {
    }); 
    

    有没有类似的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

委托方法返回正在编辑的文本字段,因此使用它来了解如何应用正确的逻辑。

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
   BOOL isValid = YES;
   if (textField == self.txtName) {
      //name validation
   } else if (textField == self.txtPhone) {
     //number validation
   }
   return isValid;
}

答案 1 :(得分:-1)

我认为你最好在storyboard编辑器中指定textfield 是一种电话类型,让ios进行检查。原因之一 是因为用户将获得更好的文字输入键盘, 另一个是ios会正确地使用+前缀和数字。

至于名字字段,如果我是你,我不会对它做任何限制。