Uitextfield limit words in ios, especially in Chinese
Last Update:2015-07-29
Source: Internet
Author: User
<span id="Label3"></p><p><p>first, if it's just numbers and english, it only needs to implement <span class="s1">the delegate of</span> <span class="s1">Uitextfield or</span> uitextview.</p></p><pre name="code" class="code-java"><pre name="code" class="code-java"><span style="font-size: 14px;">-(BOOL) textField: (uitextfield *) textField shouldchangecharactersinrange: (nsrange) range Replacementstring: ( NSString *) string{ <span class="code-keyword">if (textField = = Self.titlefield) { <span class="code-keyword"><span class="code-keyword">return NO; } <span class="code-keyword">return YES;}</span> </span></span> </span></span><br><br><span style="font-size: 14px;">however, such restrictions are simple and rude, may affect the User's normal logic input, such as 20 characters entered, to backspace back the delete character.</span><br><span style="font-size: 14px;">At this time we may consider "Detect backspace in uitextfield", such as simply determine whether the length of the replacementstring is 0 or the content is not "". Because the delete key of the iOS keyboard indicates that the Replacementtext is @ "", don't ask me how I know ...</span></pre></pre><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">-(<span class="s2">BOOL<span class="s1">) textView: (<span class="s3">uitextview<span class="s1"> *) textView shouldchangetextinrange: (<span class="s3">nsrange<span class="s1">) range Replacementtext: (<span class="s3">nsstring<span class="s1"> *) text</span> </span> </span> </span> </span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">{</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;"><span class="s2">if<span class="s1"> ([text <span class="s3">isequaltostring<span class="s1">:<span class="s4">@ "\ n"<span class="s1">]) {</span> </span> </span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">[textView <span class="s3">resignfirstresponder<span class="s1">];</span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;"><span class="s2">return<span class="s1"> <span class="s2">NO<span class="s1">;</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">}<span class="s2">Else<span class="s1"> <span class="s2">if<span class="s1"> (textView. <span class="s3"> Text<span class="s1">. <span class="s3"> Length<span class="s1"> > <span class="s5"><span class="s1"> &&![ Text <span class="s3">isequaltostring<span class="s1">:<span class="s4">@ ""<span class="s1">])</span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span> </span></span></span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">{</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;"><span class="s2">return<span class="s1"> <span class="s2">NO<span class="s1">;</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">}</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;"><span class="s2">Else</span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">{</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;"><span class="s2">return<span class="s1"> <span class="s2">YES<span class="s1">;</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">}</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 13px;">}</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 14px;">You may feel basically done here, but when you enter 19 characters, the 20th character continues to be entered as a Chinese character, then the system will provide a series of subsequent words on the keyboard, and you will find that this way you can enter the word consecutively to break the 20-character limit. You can listen to uitextfiled changes with Notifications.</span></p></p><p class="p1"><p class="p1"><span class="s1">[[<span class="s2">nsnotificationcenter<span class="s1"> <span class="s2">defaultcenter<span class="s1">] <span class="s2">addobserver<span class="s1">:<span class="s3">self<span class="s1"> <span class="s2">selector<span class="s1">:<span class="s3">@ Selector<span class="s1">(messagetextdidchange:) <span class="s2">name<span class="s1">:<span class="s2">uitextfieldtextdidchangenotification<span class="s1"> <span class="s2">object<span class="s1">:<span class="s3">nil<span class="s1">];</span> </span> </span> </span> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p></p><p class="p1"><p class="p1"><span class="s1">-(<span class="s2">void<span class="s1">) messagetextdidchange: (<span class="s2">ID<span class="s1">) TextField {</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1"><span class="s4">nsstring<span class="s1"> *string = <span class="s2">self<span class="s1">. <span class="s6"> Checkmessage<span class="s1">. <span class="s4"> Text<span class="s1">;</span> </span> </span> </span> </span> </span> </span> </span></span></p></p><p class="p3"><p class="p3"><span class="s7"><span class="s8">// <span class="s1">Chinese Input method does not click ok, Pinyin automatically with a space so this heap of code just to remove the space to calculate the length</span> </span></span></p></p><p class="p4"><p class="p4"><span class="s3"><span class="s1">nscharacterset<span class="s3"> *whitespaces = [<span class="s1">nscharacterset<span class="s3"> <span class="s1">whitespaceandnewlinecharacterset<span class="s3">];</span> </span></span></span></span></span></span></p></p><p class="p4"><p class="p4"><span class="s3"><span class="s1">nspredicate<span class="s3"> *noemptystrings = [<span class="s1">nspredicate<span class="s3"> <span class="s1">predicatewithformat<span class="s3">:<span class="s9">@ ' self! = ' "<span class="s3">];</span> </span> </span></span></span></span></span></span></span></p></p><p class="p4"><p class="p4"><span class="s3"><span class="s1">nsarray<span class="s3"> *parts = [string <span class="s1">componentsseparatedbycharactersinset<span class="s3">: whitespaces];</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1"><span class="s4">nsarray<span class="s1"> *filteredarray = [parts <span class="s4">filteredarrayusingpredicate<span class="s1">: noemptystrings];</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1">string = [filteredarray <span class="s4">componentsjoinedbystring<span class="s1">:<span class="s9">@ ""<span class="s1">];</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1"><span class="s2">if<span class="s1"> (string. <span class="s4"> Length<span class="s1"> > <span class="s5"><span class="s1">) {</span> </span> </span> </span> </span> </span></span></p></p><p class="p4"><p class="p4"><span class="s3"><span class="s1">dispatch_async<span class="s3">(<span class="s1">dispatch_get_main_queue<span class="s3">(), ^{</span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1"><span class="s2">self<span class="s1">. <span class="s6"> Checkmessage<span class="s1">. <span class="s4"> Text<span class="s1"> = [string <span class="s4">substringtoindex<span class="s1">:<span class="s5">+<span class="s1">];</span> </span> </span> </span> </span> </span> </span> </span> </span> </span></span></p></p><p class="p1"><p class="p1"><span class="s1">});</span></p></p><p class="p1"><p class="p1"><span class="s1">}</span></p></p><p class="p1"><p class="p1"><span class="s1">}</span></p></p><p class="p1"><p class="p1"><span class="s1" style="font-size: 14px;">however, listen to the message also remember to release the monitoring, fortunately, Uitextfield itself provides the corresponding event monitoring</span></p></p><pre name="code" class="code-java"><pre name="code" class="code-java"><span style="font-size: 14px;">[textField addtarget:self action: @selector (textfielddidchange:) forcontrolevents:uicontroleventeditingchanged];</span></pre></pre><pre name="code" class="code-java"><pre name="code" class="code-java"><span style="font-size: 14px;">-(void) textfielddidchange: (uitextfield *) textfield{ <span class="code-keyword">if (textField = = Self.titlefield) { <span class="code-keyword">if ( TextField.text.length >) { textfield.text = [textfield.text substringtoindex:20];} } <br>But finally this, Bo master himself did not try, we feel the HA</span></span></span></pre></pre><p><p>Uitextfield limit words in ios, especially in Chinese</p></p></span>