国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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只限輸入中文、英文、數字及實時限制字符個數封裝實現,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辛集市| 泸定县| 泰安市| 绍兴市| 民县| 淮南市| 大丰市| 青龙| 定南县| 革吉县| 滁州市| 安西县| 连南| 喀什市| 藁城市| 龙海市| 娱乐| 江华| 澄迈县| 扶余县| 水城县| 浪卡子县| 宜黄县| 布拖县| 小金县| 卢龙县| 垦利县| 开封县| 芦溪县| 西畴县| 灵丘县| 神农架林区| 宁河县| 德格县| 龙山县| 长治市| 朝阳县| 汝州市| 清流县| 龙口市| 阿城市|