扯犢子的話就不說了,記錄一下項(xiàng)目中實(shí)際用到的一些限制輸入的運(yùn)用:
1:最常用的限制輸入長度;
//輸入框添加監(jiān)聽事件
[self.textFieldaddTarget:selfaction:@selector(textFieldChanged:)forControlEvents:UIControlEventEditingChanged];
//實(shí)現(xiàn)方法
- (void)textFieldChanged:(UITextField *)textField {
????NSString *toBeString = textField.text;
????NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage;
? ??if ([lang isEqualToString:@"zh-Hans"]) { //中文輸入
? ??????UITextRange *selectedRange = [textField markedTextRange];
? ??????UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
? ??????if (!position) {// 沒有高亮選擇的字,則對已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
? ??????????if (toBeString.length > 15) {
? ??????????????textField.text = [toBeString substringToIndex:15];?
? ??????????????[textField resignFirstResponder];
? ? ? ? ? ? }
? ? ? ? }
? ? }else{
? ??????if (toBeString.length > 15) {
? ??????????textField.text = [toBeString substringToIndex:15];
? ? ? ? }
? ? }
}
2.限制空格的輸入
//禁止輸入空格
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string {
? ? NSString *tem = [[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]componentsJoinedByString:@""];
? ? if(![stringisEqualToString:tem]) {
? ? ? ? returnNO;
? ? }
? ? return YES;
}
3.限制表情的輸入
//UITextField代理方法
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string {? ? // 不讓輸入表情
? ? if([textField isFirstResponder]) {
? ? ? ? if ([[[textField textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textField textInputMode] primaryLanguage]) {
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? }
? ? //判斷鍵盤是不是九宮格鍵盤
? ? if([ZZClass isNineKeyBoard:string] ){
? ? ? ? returnYES;
? ? }else{
? ? ? ? if([ZZClass hasEmoji:string] || [ZZClass stringContainsEmoji:string]){
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? }
? ? return YES;
}
以上三個(gè)判斷方法如下(我也是網(wǎng)上找到的,自己拿來用順便做個(gè)總結(jié))
/**
?*? 判斷字符串中是否存在emoji
?*@paramstring 字符串
?*@returnYES(含有表情)
?*/
+ (BOOL)stringContainsEmoji:(NSString*)string
{
? ? __block?BOOL?returnValue =NO;
? ? [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
?? ? ^(NSString*substring,NSRangesubstringRange,NSRangeenclosingRange,BOOL*stop) {
?? ? ? ? const?unichar hs = [substring characterAtIndex:0];
?? ? ? ? if(0xd800<= hs && hs <=0xdbff) {
?? ? ? ? ? ? if(substring.length>1) {
?? ? ? ? ? ? ? ? constunicharls = [substringcharacterAtIndex:1];
?? ? ? ? ? ? ? ? constintuc = ((hs -0xd800) *0x400) + (ls -0xdc00) +0x10000;
?? ? ? ? ? ? ? ? if(0x1d000<= uc && uc <=0x1f77f) {
?? ? ? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? ? ? }
?? ? ? ? ? ? }
?? ? ? ? }elseif(substring.length>1) {
?? ? ? ? ? ? constunicharls = [substringcharacterAtIndex:1];
?? ? ? ? ? ? if(ls ==0x20e3) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }
?? ? ? ? }else{
?? ? ? ? ? ? if(0x2100<= hs && hs <=0x27ff) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }elseif(0x2B05<= hs && hs <=0x2b07) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }elseif(0x2934<= hs && hs <=0x2935) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }elseif(0x3297<= hs && hs <=0x3299) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }elseif(hs ==0xa9|| hs ==0xae|| hs ==0x303d|| hs ==0x3030|| hs ==0x2b55|| hs ==0x2b1c|| hs ==0x2b1b|| hs ==0x2b50) {
?? ? ? ? ? ? ? ? returnValue =YES;
?? ? ? ? ? ? }
?? ? ? ? }
?? ? }];
? ? returnreturnValue;
}
/**
?*? 判斷字符串中是否存在emoji 限制第三方鍵盤(常用的是搜狗鍵盤)的表情
?*@paramstring 字符串
?*@returnYES(含有表情)
?*/
+ (BOOL)hasEmoji:(NSString*)string {
? ? NSString *pattern = @"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]";
? ? NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", pattern];
? ? BOOLisMatch = [predevaluateWithObject:string];
? ? returnisMatch;
}
/**
?判斷是不是九宮格
?@paramstring? 輸入的字符
?@returnYES(是九宮格拼音鍵盤)
?*/
+ (BOOL)isNineKeyBoard:(NSString*)string
{
? ? NSString*other =@"????????";
? ? intlen = (int)string.length;
? ? for(inti=0;i
? ? {
? ? ? ? if(!([otherrangeOfString:string].location!=NSNotFound))
? ? ? ? ? ? returnNO;
? ? }
? ? return YES;
}