亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS UITextField、UITextView只限輸入中文、英文、數字及實時限制字符個數的封裝實現代碼

2020-07-26 02:59:55
字體:
來源:轉載
供稿:網友

引言需求:(輸入框限制輸入多少字符)

1、一個字母、符號、數字相當于一個字符
2、一個漢字相當于兩個字符
3、不能輸入特殊字符
4、不能輸入emoji表情

直接上代碼

一、注冊通知

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChange:) name:UITextFieldTextDidChangeNotification object:nil];  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChange:) name:UITextViewTextDidChangeNotification object:nil];

二、通知實現

- (void)textFieldChange:(UITextField *)textField{  //判斷輸入(不能輸入特殊字符)  [RestrictionInput restrictionInputTextField:self.titleTextField maxNumber:100 showView:self showErrorMessage:@"商品名稱0~100字符~"];  [RestrictionInput restrictionInputTextView:self.infoTextView maxNumber:200 showView:self showErrorMessage:@"商品描述0~200字符~"];}- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{  if ([RestrictionInput isInputRuleAndBlank:text] || [text isEqualToString:@""]) {//當輸入符合規則和退格鍵時允許改變輸入框    return YES;  } else {    return NO;  }}- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  if ([RestrictionInput isInputRuleAndBlank:string] || [string isEqualToString:@""]) {//當輸入符合規則和退格鍵時允許改變輸入框    return YES;  } else {    return NO;  }}

三、封裝類(RestrictionInput)

.h

#import <Foundation/Foundation.h>@interface RestrictionInput : NSObject+ (void)restrictionInputTextField:(UITextField *)inputClass maxNumber:(NSInteger)maxNumber showView:(UIView *)showView showErrorMessage:(NSString *)errorMessage;+ (void)restrictionInputTextView:(UITextView *)inputClass maxNumber:(NSInteger)maxNumber showView:(UIView *)showView showErrorMessage:(NSString *)errorMessage;+ (BOOL)isInputRuleAndBlank:(NSString *)str;

.m

#import "RestrictionInput.h"@implementation RestrictionInput+ (void)restrictionInputTextField:(UITextField *)inputClass maxNumber:(NSInteger)maxNumber showView:(UIView *)showView showErrorMessage:(NSString *)errorMessage{  NSString *toBeString = inputClass.text;  if (![self isInputRuleAndBlank:toBeString]) {    inputClass.text = [self disable_emoji:toBeString];    return;  }  NSString *lang = [[inputClass textInputMode] primaryLanguage]; // 獲取當前鍵盤輸入模式  if([lang isEqualToString:@"zh-Hans"]) { //簡體中文輸入,第三方輸入法(搜狗)所有模式下都會顯示“zh-Hans”    UITextRange *selectedRange = [inputClass markedTextRange];    //獲取高亮部分    UITextPosition *position = [inputClass positionFromPosition:selectedRange.start offset:0];    //沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制    if(!position) {      NSString *getStr = [self getSubString:toBeString maxNumber:maxNumber];      if(getStr && getStr.length > 0) {        inputClass.text = getStr;        [showView showHudText:errorMessage hideDelay:1.0 completionBlock:nil];        NSLog(@"%@", inputClass.text);      }    }  } else{    NSString *getStr = [self getSubString:toBeString maxNumber:maxNumber];    if(getStr && getStr.length > 0) {      inputClass.text= getStr;      [showView showHudText:errorMessage hideDelay:1.0 completionBlock:nil];      NSLog(@"%@",inputClass.text);    }  }}+ (void)restrictionInputTextView:(UITextView *)inputClass maxNumber:(NSInteger)maxNumber showView:(UIView *)showView showErrorMessage:(NSString *)errorMessage{  NSString *toBeString = inputClass.text;  if (![self isInputRuleAndBlank:toBeString]) {    inputClass.text = [self disable_emoji:toBeString];    return;  }  NSString *lang = [[inputClass textInputMode] primaryLanguage]; // 獲取當前鍵盤輸入模式  if([lang isEqualToString:@"zh-Hans"]) { //簡體中文輸入,第三方輸入法(搜狗)所有模式下都會顯示“zh-Hans”    UITextRange *selectedRange = [inputClass markedTextRange];    //獲取高亮部分    UITextPosition *position = [inputClass positionFromPosition:selectedRange.start offset:0];    //沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制    if(!position) {      NSString *getStr = [self getSubString:toBeString maxNumber:maxNumber];      if(getStr && getStr.length > 0) {        inputClass.text = getStr;        [showView showHudText:errorMessage hideDelay:1.0 completionBlock:nil];        NSLog(@"%@", inputClass.text);      }    }  } else{    NSString *getStr = [self getSubString:toBeString maxNumber:maxNumber];    if(getStr && getStr.length > 0) {      inputClass.text= getStr;      [showView showHudText:errorMessage hideDelay:1.0 completionBlock:nil];      NSLog(@"%@",inputClass.text);    }  }}/** * 獲得 kMaxLength長度的字符 */+ (NSString *)getSubString:(NSString*)string maxNumber:(NSInteger)maxNumber{  NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);  NSData* data = [string dataUsingEncoding:encoding];  NSInteger length = [data length];  if (length > maxNumber) {    NSData *data1 = [data subdataWithRange:NSMakeRange(0, maxNumber)];    NSString *content = [[NSString alloc] initWithData:data1 encoding:encoding];//【注意4】:當截取kMaxLength長度字符時把中文字符截斷返回的content會是nil    if (!content || content.length == 0) {      data1 = [data subdataWithRange:NSMakeRange(0, maxNumber - 1)];      content = [[NSString alloc] initWithData:data1 encoding:encoding];    }    return content;  }  return nil;}/** * 字母、數字、中文正則判斷(不包括空格) */+ (BOOL)isInputRuleNotBlank:(NSString *)str {  NSString *pattern = @"^[➋➌➍➎➏➐➑➒/a-zA-Z/u4E00-/u9FA5//d]*$";  NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];  BOOL isMatch = [pred evaluateWithObject:str];  return isMatch;}/** * 字母、數字、中文正則判斷(包括空格)【注意3】 */+ (BOOL)isInputRuleAndBlank:(NSString *)str {  //九宮格無法輸入解決需要加上正則 /➋➌➍➎➏➐➑➒  NSString *pattern = @"^[➋➌➍➎➏➐➑➒/a-zA-Z/u4E00-/u9FA5//d//s]*$";  NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];  BOOL isMatch = [pred evaluateWithObject:str];  return isMatch;}+ (NSString *)disable_emoji:(NSString *)text{  NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^//u0020-//u007E//u00A0-//u00BE//u2E80-//uA4CF//uF900-//uFAFF//uFE30-//uFE4F//uFF00-//uFFEF//u0080-//u009F//u2000-//u201f/r/n]"options:NSRegularExpressionCaseInsensitive error:nil];  NSString *modifiedString = [regex stringByReplacingMatchesInString:text                                options:0                                 range:NSMakeRange(0, [text length])                             withTemplate:@""];  return modifiedString;}

以上所述是小編給大家介紹的iOS UITextField、UITextView只限輸入中文、英文、數字及實時限制字符個數封裝實現,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大荫蒂xxx| 久久久亚洲福利精品午夜| 精品亚洲男同gayvideo网站| 精品丝袜一区二区三区| 久久精品国产欧美亚洲人人爽| 97精品一区二区三区| 国产亚洲欧洲高清| 欧美高清视频在线观看| 亚洲天堂影视av| 在线亚洲国产精品网| 日韩免费av在线| 久久久国产精品x99av| 中文字幕亚洲二区| 国产区精品在线观看| 国产裸体写真av一区二区| 欧美日韩国产精品一区| 日韩欧美极品在线观看| 成人a在线视频| 欧美日本国产在线| 国产成人精品久久| 国产精品免费看久久久香蕉| 精品一区二区三区四区在线| 久久精品视频导航| 日韩av电影院| 久久久91精品国产一区不卡| 欧美极品少妇xxxxx| 992tv成人免费影院| 欧美午夜xxx| 亚洲自拍偷拍色片视频| 亚洲国产一区自拍| 一本色道久久综合亚洲精品小说| 亚洲第一免费播放区| 欧美做爰性生交视频| 欧美成人中文字幕在线| 神马国产精品影院av| 国外日韩电影在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 国产99久久精品一区二区永久免费| 91社区国产高清| 欧美亚洲国产成人精品| 亚洲风情亚aⅴ在线发布| 免费91麻豆精品国产自产在线观看| 日韩成人av在线播放| 91情侣偷在线精品国产| 国产精品自产拍在线观看| 精品少妇一区二区30p| 成人福利网站在线观看| 国产精品九九久久久久久久| 久久艳片www.17c.com| 欧美亚洲视频一区二区| 久久国产精品偷| 中文字幕亚洲欧美一区二区三区| 8050国产精品久久久久久| 热久久视久久精品18亚洲精品| 欧日韩在线观看| 97精品国产97久久久久久| 91国自产精品中文字幕亚洲| 国产精品中文字幕久久久| 91高清免费在线观看| 日韩在线观看免费全集电视剧网站| 日韩精品视频在线播放| 97在线免费观看视频| 91在线网站视频| 在线观看精品自拍私拍| 欧美性在线观看| 欧美成人第一页| 久久久久国产精品免费网站| 欧美猛少妇色xxxxx| 亚洲aaaaaa| 精品欧美aⅴ在线网站| 亚洲免费精彩视频| 日本成人黄色片| 欧美性videos高清精品| 日韩在线中文字幕| 日韩在线高清视频| 欧美性xxxxxx| 最好看的2019年中文视频| 欧美性开放视频| 久久久成人精品视频| 欧美成人精品激情在线观看| 日韩经典一区二区三区| 成人欧美一区二区三区在线湿哒哒| 热99在线视频| 国产女同一区二区| 国产精品9999| 欧美激情一区二区三级高清视频| 亚洲国产精品电影在线观看| 不卡av日日日| 日韩电影中文字幕| 国产成人+综合亚洲+天堂| 久久国产精品久久久久久| 日韩av影片在线观看| 97视频在线免费观看| 91国内在线视频| 国产日韩精品一区二区| 97久久久免费福利网址| 日韩福利在线播放| 69**夜色精品国产69乱| 欧美影院在线播放| 国外成人在线直播| 国产亚洲欧洲高清一区| 日本成熟性欧美| 最近2019中文免费高清视频观看www99| 日本久久久久久久久久久| 国产香蕉精品视频一区二区三区| 日韩电影中文字幕在线观看| 国产精品美女久久久久久免费| 亚洲免费中文字幕| 国产精品久久久久久av福利| 亚洲成人在线视频播放| 91久久久久久久久久久| 国产精品久久久av久久久| 欧美国产日韩xxxxx| 欧美在线视频免费观看| 国产精品视频成人| 亚洲欧洲av一区二区| 亚洲免费电影在线观看| 欧美在线国产精品| 精品国产一区二区在线| 蜜月aⅴ免费一区二区三区| 日韩久久午夜影院| 草民午夜欧美限制a级福利片| 亚洲女成人图区| 亚洲伊人一本大道中文字幕| 日本精品视频网站| 久久久国产精品一区| 97精品国产91久久久久久| 91国产中文字幕| 久久精品视频99| 一区二区三区 在线观看视| 欧美亚洲在线视频| 国产亚洲aⅴaaaaaa毛片| 国产精品狠色婷| 亚洲天堂av在线免费| 日韩成人小视频| 国产日韩一区在线| 国产精品稀缺呦系列在线| 久久久久久久久久久久久久久久久久av| 青青草国产精品一区二区| 国产精品白嫩初高中害羞小美女| 欧美激情一区二区三区成人| 中文字幕亚洲欧美日韩在线不卡| 蜜臀久久99精品久久久久久宅男| 色无极亚洲影院| 九九综合九九综合| 萌白酱国产一区二区| 国产午夜精品视频免费不卡69堂| 国产成人综合久久| 91精品国产91久久久久福利| 亚洲国产中文字幕久久网| 91精品视频大全| 日本欧美在线视频| 国产免费一区二区三区香蕉精| 亚洲一区二区日本| 国产亚洲精品久久久久久牛牛| 亚洲女人初尝黑人巨大| 亚洲一区二区三区成人在线视频精品| 国产色综合天天综合网| 国产精品高潮呻吟久久av野狼| 91精品国产综合久久香蕉922| 色午夜这里只有精品| 国产精品久久久久久久久久久久| 精品亚洲一区二区三区在线观看| 日韩精品久久久久|