介绍
今天就跟大家聊聊有关怎么在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中限制文本字符