您的位置:新浦京赌场娱乐场 > 互联网技术 > iOS - UITextField限制长度 emoji表情

iOS - UITextField限制长度 emoji表情

2019-06-24 23:14

应日本用户的要求,苹果在iOS 4内置了一系列“正式的”颜文字表情符号,可从日文Romaji键盘输入中找到。

捣鼓了半天 终于把自己的博客搭建好了,发一篇文章试试手。公司里的服务器比较low,不能支持emoji表情,本意是解决这个问题,自定义一个UITextField的控件。后来索性把长度校验也做了进去,基本满足了正常的需求。

应日本用户的要求,苹果在iOS 4内置了一系列“正式的”颜文字表情符号,可从日文Romaji键盘输入中找到。

我的博客

一位读者告诉科技网站,在激活了日文Romaji键盘(用来输入罗马风格的文字)后,他发现在数字键盘那出现了一个新的按键:即微笑符号"^_^"。点击这个键可输入一个微笑的表情,并且下方会弹出更多表情选择列表。点击箭头键或“Space”键可切换页面,共有50多个在日本广为流传的表情可选。

一 限制文本长度

  • 目前textfield的输入大概就2种:

  • 通过点击键盘按键输入的

  • 通过点击键盘联想输入的 [同时有高亮字符(maskText)占位]

首先参考了一些文章:

主要我看这篇文章比较全

网上能搜索到的主要在这篇文章里都有体现了,但是也是有问题的。

图片 1
用户还能轻击来改变这些表情的顺序。然而,一旦在文本中输入这些表情,文本其他内容的字体将会自动变成Helvetica字体。

先说说实现的方法
  • 对应上述3种情况限制长度的主要方法

  • 点击键盘输入的不管中英文点击键盘就能唤起UITextFieldDelegate

- textField:(UITextField *)textField shouldChangeCharactersInRange:range replacementString:(NSString *)string所以通过这个方法可以达到过滤掉键盘输入的文字超长的效果。

  • 中文输入等 都是通过点击键盘后选取键盘联想也就是上述第二种情况,在上面的代理中无法监听,不过UITextField身为UIControl 可以通过[self addTarget:<#(nullable id)#> action:<#(nonnull SEL)#> forControlEvents:<#(UIControlEvents)#>] 通过监听UIControlEventEditingChanged 来实现效果

==注意:在需要高亮字符占位的输入法(不仅只有中文输入法),在点击键盘按键输入时还是能被第一种情况的代理监听,只有当选取联想出来的文字的时候才不能。==

图片 2

反例分析

现在网上搜索一大堆限制文字长度的方法大概是这样(我就用上述连接上的代码了反正都类似)

-textFiledEditChanged:(NSNotification *)obj{UITextField *textField = (UITextField *)obj.object;NSString *toBeString = textField.text;NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写UITextRange *selectedRange = [textField markedTextRange]; //获取高亮部分UITextPosition *position = [textFieldpositionFromPosition:selectedRange.start offset:0];// 没有高亮选择的字,则对已输入的文字进行字数统计和限制if (!position) {if (toBeString.length > kMaxLength) {textField.text = [toBeString substringToIndex:kMaxLength];}} // 有高亮选择的字符串,则暂不对文字进行统计和限制else{}} // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 else{if (toBeString.length > kMaxLength) {textField.text = [toBeString substringToIndex:kMaxLength];}}}
  • 首先看代码就觉得这个是用通知的形势来发送UIControlEventEditingChanged的事件,这明显不可取,同一个页面可能有多个textField这玩意还要做个校验通知是谁发出来的。

  • 然后他写死限制了中文输入法,这不是很可取,日语,韩语输入法的形式和中文差不多,还有特意过滤的高亮状态,对高亮状态的字不进行字数统计,这明显是错的。高亮状态的时候,可以不停的输入在还没有结束输入之前完全可能超过字数限制,这时候直接取textField.text的长度就超过了要求。

本文由新浦京赌场娱乐场发布于互联网技术,转载请注明出处:iOS - UITextField限制长度 emoji表情

关键词: