iOS 限制输入字数完美解决方案
2019独角兽企业重金招聘Python工程师标准>>>
关于限制输入字数以前也做过,网上也很多方法。
但都不够完美,以前的测试人员也没千方百计的挑毛病,所以就糊弄过去了。
现在这个项目的测试人员为了找bug真是无所不用其极。。。。
1.一般方法就是通过UITextField的代理方法
#pragma mark - UITextFieldDelegate- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{if (textField == self.textFieldName) {if (string.length == 0) return YES;NSInteger existedLength = textField.text.length;NSInteger selectedLength = range.length;NSInteger replaceLength = string.length;if (existedLength - selectedLength + replaceLength > 20) {return NO;}}return YES;
}
but这个方法还是有bug的。。。这个方法很容易被中文的联想、粘贴等方式突破限制长度。
2.给UITextField加事件,然后在事件里截取至最大长度
[self.textFieldName addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];- (void)textFieldDidChange:(UITextField *)textField
{if (textField == self.textFieldName) {if (textField.text.length > 15) {textField.text = [textField.text substringToIndex:15];}}
}
你以为这样搞定了中文联想、粘贴的bug,就高枕无忧了吗。。。这方法还是有bug的,如果输入至还剩一个字符时,再输入Emoji呢?Emoji占2个字符,会被截得出现半个Emoji的情况,含半个Emoji的字符串在URL编码时会变为nil。
3.限制输入字数完美解决方案
其实就是在方案2上做了调整
- (void)textFieldDidChange:(UITextField *)textField
{if (textField == self.textFieldName) {if (textField.text.length > 15) { UITextRange *markedRange = [textField markedTextRange]; if (markedRange) { return; }//Emoji占2个字符,如果是超出了半个Emoji,用15位置来截取会出现Emoji截为2半//超出最大长度的那个字符序列(Emoji算一个字符序列)的rangeNSRange range = [textField.text rangeOfComposedCharacterSequenceAtIndex:15];textField.text = [textField.text substringToIndex:range.location];}}
}
转载于:https://my.oschina.net/zhanglinfengzlf/blog/699205
iOS 限制输入字数完美解决方案相关推荐
- python限制输入字数_iOS 限制输入字数完美解决方案
关于限制输入字数以前也做过,网上也很多方法. 但都不够完美,以前的测试人员也没千方百计的挑毛病,所以就糊弄过去了. 现在这个项目的测试人员为了找bug真是无所不用其极.... 1.一般方法就是通过UI ...
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...
- Cordova iOS WKWebView 整改完美解决方案
Cordova iOS WKWebView 整改完美解决方案 前言说明:2020年3月之前已经上线的项目,可以继续使用UIWebView继续迭代版本,每次提交审核会收到苹果的警告邮件:2020年3月之 ...
- 在Prezi中输入简体中文的完美解决方案
Prezi是一种在线制作演示文档(PPT)的工具,它与传统的Powerpoint或者Keynote的表现形式完全不同,被称为"powerpoint的颠覆者",在36Kr上曾经有过多 ...
- “IIS配置401错误”完美解决方案
"IIS配置401错误"完美解决方案 1.错误号401.1 症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝. 分析: 由于用户匿名访问使用的账号(默认是 ...
- linux关机_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...
欢迎关注我的个人公众号:AI蜗牛车 前言 结束了每天的紧张的工作,这两天真的有些肝. 这两天打打字,突然感觉手指头疼起来了,想意识到成天打了十多个小时的键盘, 手指头都疲劳了= = 之后这两天基本上除 ...
- rewrite.php wordpress 缓存 固定连接,【转】Wordpress中文标签无法正常连接 - 完美解决方案...
中文标签Wordpress无法正常连接 - 完美解决方案 WordPress中文标签链接打不开(显示错误 404 - 文件未找到)的解决方法 例如点击中文标签出现提示找不到文章的页面,上网上搜了一下解 ...
- 【移动开发】EditText输入字数限制总结(包括中文输入内存溢出的解决方法)...
限定EditText输入个数的解决方案很多,但是一般主要考虑两点,也就是处理两件事: (1)不同语言字符(英文.中文等)处理方式 (2)输入字符达到数目后,是否仍然允许用户输入 第一点,涉及的东东其实 ...
- linux windows 域,linux加入windows域之完美解决方案
<linux加入windows域之完美解决方案>由会员分享,可在线阅读,更多相关<linux加入windows域之完美解决方案(10页珍藏版)>请在人人文库网上搜索. 1.li ...
最新文章
- 用python做算法_自己用python写的螺旋矩阵生成算法
- 资源 | 一文读懂深度学习(附学习资源)
- 微信界面代码android,仿微信界面代码安卓版
- 理解Java中的hashCode 和 equals 方法
- python操作mysql事务提交_python连接mysql并提交mysql事务示例
- python获取原图GPS位置信息,轻松得到你的活动轨迹
- C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等
- ibatis+Castle.MCV 版 NPetshop3
- sql常用语法命令及函数_SQL右连接命令:语法示例
- Unity3d发布web版无法连接数据库
- [摘抄]游戏主循环逻辑
- 在克隆环境上分离httpd和subversion。
- numpy.argmin 使用
- torch.nn.Conv2d详解
- gateway断言工厂Path,Weight
- java物流管理系统_基于java的物流管理系统
- kali启动后出现Resuming from hibernation错误
- win7/win10下KiWi Syslog服务器的安装与配置
- C盘根目录下只能创建文件夹不能新建文件的解决办法
- java around_Java逆向基础之AspectJ的Around方法修改方法体
热门文章
- 家庭中计算机应用包括,《管理信息系统中计算机应用》沟通考笔试B卷答案
- 被踢出sci_心痛啊!全世界历史最长的期刊,被踢出SCI了!
- 致力协同办公oa系统服务器设置,致力协同办公oa系统安装手册新.pdf
- 手动添加linux用户,Linux入门教程:如何手动创建一个Linux用户
- 哪一版可以打开pdg 安卓超星图书馆_南安:山区孩子有了数字图书馆
- slice 和 splice 区别
- T- SQL性能优化详解
- vue,一路走来(10)--生产环境
- 文本比较算法Ⅱ——Needleman/Wunsch算法
- 12864液晶驱动源码,独创中英文混合输出