前言
	本文主要介紹使用UITextField限制只可輸入中,英文,數(shù)字,我們可以使用NSPredicate正則表達(dá)式可以過(guò)濾,下面看看詳細(xì)的步驟方法
首先設(shè)置UItextField的代理
實(shí)現(xiàn)如下方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if ([self isInputRuleAndNumber:string] || [string isEqualToString:@""]) {  return YES; } return NO;}	然后添加事件,因?yàn)檫x擇輸入法聯(lián)想的詞.是不會(huì)經(jīng)過(guò)textField:shouldChangeCharactersInRange:replacementString:方法的
[textField addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];
實(shí)現(xiàn):
- (void)textFieldChanged:(UITextField *)textField { NSString *toBeString = textField.text; NSString *lastString; if(toBeString.length>0)  lastString=[toBeString substringFromIndex:toBeString.length-1]; if (![self isInputRuleAndNumber:toBeString]&&[self hasEmoji:lastString]) {  textField.text = [self disable_emoji:toBeString];  return; } NSString *lang = [[textField textInputMode] primaryLanguage]; if([lang isEqualToString:@"zh-Hans"]) {  UITextRange *selectedRange = [textField markedTextRange];  UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];  if(!position) {   NSString *getStr = [self getSubString:toBeString];   if(getStr && getStr.length > 0) {    textField.text = getStr;   }  } } else{  NSString *getStr = [self getSubString:toBeString];  if(getStr && getStr.length > 0) {   textField.text= getStr;  } }}再來(lái)實(shí)現(xiàn)限制:
pattern中,輸入需要驗(yàn)證的通過(guò)的字符
小寫a-z
大寫A-Z
漢字/u4E00-/u9FA5
數(shù)字/u0030-/u0039
- (BOOL)isInputRuleAndNumber:(NSString *)str { NSString *pattern = @"[a-zA-Z/u4E00-/u9FA5//u0030-//u0039]"; NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern]; BOOL isMatch = [pred evaluateWithObject:str]; return isMatch;}實(shí)現(xiàn)判斷是否是Emoji
- (BOOL)hasEmoji:(NSString*)str{ NSString *pattern = @"[^//u0020-//u007E//u00A0-//u00BE//u2E80-//uA4CF//uF900-//uFAFF//uFE30-//uFE4F//uFF00-//uFFEF//u0080-//u009F//u2000-//u201f/r/n]"; NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern]; BOOL isMatch = [pred evaluateWithObject:str]; return isMatch;}字符限制
#define kMaxLength 20;-(NSString *)getSubString:(NSString*)string{ NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSData* data = [string dataUsingEncoding:encoding]; NSInteger length = [data length]; if (length > kMaxLength) {  NSData *data1 = [data subdataWithRange:NSMakeRange(0, kMaxLength)];  NSString *content = [[NSString alloc] initWithData:data1 encoding:encoding];  if (!content || content.length == 0) {   data1 = [data subdataWithRange:NSMakeRange(0, kMaxLength - 1)];   content = [[NSString alloc] initWithData:data1 encoding:encoding];  }  return content; } return nil;}總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
| 
 
 | 
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注