怎么在iOS中限制文本字符

  介绍

今天就跟大家聊聊有关怎么在iOS中限制文本字符,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>方法如下

我们需要监听textfield

[textfield  addTarget: self 行动:@ selector (textFieldTextEditingChanged:), forControlEvents: UIControlEventEditingChanged];

那么,我们为什么不用textfield代理方法

- - - - - - (BOOL),文本框:(UITextField  *) textfield  shouldChangeCharactersInRange: (NSRange) range  replacementString: (NSString  *)字符串;

对于字符计算来说,使用中文联想词容易产生误差,并且有些情况并不会走上述协议方法,此处没有深究。

安康;(void) textFieldTextEditingChanged: (UITextField  *)   {//不才能支持系统表情的输入   if 才能;([[textField  textInputMode], primaryLanguage]==nil | | [[[textField  textInputMode], primaryLanguage] isEqualToString: @" emoji"]), {   返回才能;   ,,}   ,,//中英文数字判断   NSString 才能;* strig =[[NSString  alloc] initWithString textField.text):;   (才能strig  enumerateSubstringsInRange: NSMakeRange (0,, strig.length),选择:NSStringEnumerationByComposedCharacterSequences  usingBlock: ^ (NSString  *, _Nullable 子串,,NSRange  substringRange,, NSRange  enclosingRange,, BOOL  *, _Nonnull 停止),{   if 才能;(substring.length 祝辞=2),{   ,,textField.text =[textField.text  stringByReplacingOccurrencesOfString: substring  withString: @"“);   ,,}   ,,}];   ,,   NSString 才能;* toBeString =, textField.text;   NSString 才能;* lastString;   如果才能(toBeString.length> 0) {   lastString才能=[toBeString  substringFromIndex toBeString.length-1):;   if 才能;([self  isInputRuleAndNumber: lastString], !=,是的),{   ,,textField.text =, [toBeString  substringToIndex toBeString.length-1):;   ,,}   ,,}   if 才能;(textField.text.length ==, 0), {   返回才能;   ,,}   NSString 才能;* lang =, [textField.textInputMode  primaryLanguage];,//,键盘输入模式   if 才能;([lang  isEqualToString: @" zh-Hans"]),{,//简体中文输入,包括简体拼音,健体五笔,简体手写   UITextRange 才能;* selectedRange =, [textField  markedTextRange];//才能获取高亮部分   UITextPosition 才能;* position =, (textField  positionFromPosition: selectedRange.start 抵消:0];//才能,没有高亮选择的字,则对已输入的文字进行字数统计和限制   if 才能;位置(!),{   ,,if  ([self  unicodeLengthOfString: textField.text],祝辞,kMaxLength) {   ,,[self  saveOKText textField.text):;   ,才能回报;   ,,}   ,,}//,才能有高亮选择的字符串,则暂不对文字进行统计和限制   其他{才能   ,,}   其他}{才能,//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况   if 才能;([self  unicodeLengthOfString: textField.text],祝辞,kMaxLength), {   ,,[self  saveOKText textField.text):;   ,才能回报;   ,,}   ,,}   }

上述方法,调用了三个重要方法

isInputRuleAndNumber此方法对于手写时出现的一些图案没有剔除

# pragma  mark 作用;谓词条件限制/* *   模式中,输入需要验证的通过的字符   ,小写a - z   ,大写a - z   ,汉字\ \ u9FA5 u4E00   ,数字\ \ u0039 u0030   ,@param  str 要过滤的字符   ,@return  YES 只允许输入字母和汉字   ,*/安康;(BOOL) isInputRuleAndNumber:(NSString  *) str  {   ,NSString  * pattern =, @" [a-zA-Z \ u4E00 - \ u9FA5 \ \ u0030 \ \ u0039]“;   ,NSPredicate  * pred =, (NSPredicate  predicateWithFormat: @" SELF  MATCHES  % @",,模式);   ,BOOL  isMatch =, (pred  evaluateWithObject: str);   ,return  isMatch;   }

字符计算unicodeLengthOfString

参考iOS textField限制字符串长度字符数

- - - - - -(了NSUInteger) unicodeLengthOfString: (NSString  *), text  {   ,NSUInteger  asciiLength =, 0;   ,for  (NSUInteger 小姐:=,0;,小姐:& lt;, text.length;,我+ +),{   ,unichar  uc =, (text  characterAtIndex:,我);   +=,asciiLength  isascii(加州大学),?,1,,2;   ,}   ,return  asciiLength;   }

怎么在iOS中限制文本字符