2014-05-20 105 views
0

我试图找出一种方法来'强制'UITextField遵循设置的方法。例如:强制UITextField将第一个字符作为数字,第二个字符作为字母数字

我已成功限制它只接受4个字符作为最大值,但我需要它将4个字符的限制设置为第一个字符“数字”第二个字符“AlphaNumeric”第三个/第四个为“数字”例如:1Z11

我也不知道你是否可以强制大写字母或不像你可以通过ASCII或VBA。

任何帮助将是完美的,我环顾四周,但我只能找到如何强制一个或另一个(所有数字或全部字母数字)。

最亲切的问候 杰米

- 编辑单

我对人物的,因为我上面说我只能想办法来限制一个或另一个,所以我不代码限制无码输入尚未(可以链接到堆栈帖子,如果你想?)。

+0

如何如何修改的问题,以显示你如何目前限制其只能接受某些字符?即显示代码。 –

+0

对于大写字母:http://stackoverflow.com/questions/2027164/iphone-force-textbox-input-to-upper-case –

+0

谢谢@GuntisTreulands为此,这看起来像它会完美的工作。 – JamieB

回答

1

尝试实现像这样的委托方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (range.location != 1) { 
     NSScanner *scanner = [NSScanner scannerWithString:string]; 
     BOOL isNumeric = [scanner scanInteger:NULL] && [scanner isAtEnd]; 
     return isNumeric; 
    }else if (range.location<4){ 
     return YES; 
    } 
    return NO; 
} 
0

请尝试以下

NSCharacterSet *numeric = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
NSCharacterSet *alphaNumberSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; 


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

    //allow backspace 
     if ([characters isEqualToString:@""]) 
{ 
    return YES; 
} 
     switch (field.text.length) { 
      case 0: 
      case 2: 
      case 3: 
     { 
      BOOL retVal = ([characters rangeOfCharacterFromSet:numeric].location == NSNotFound); 
      return retVal; 
     } 
      break; 
     case 1: 
     { 
      BOOL retVal = ([characters rangeOfCharacterFromSet:alphaNumberSet].location == NSNotFound); 
      return retVal; 

     } 
     default: 
      return NO; 
      break; 
    } 

} 
相关问题