Uitextfield limit words in ios, especially in Chinese

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>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.