UITextField实现过滤选中状态拼音
2016-04-15 18:56
555 查看
先提供下简书地址, 排版更好. 我的简书地址: http://www.jianshu.com/p/80e79c6d1511
UITextField相信很多的iOS开发者都会经常用到, 最近项目中遇到了一个问题.我把UITextField当成搜索框来用了, 结果呢, 用系统自带的键盘输入的时候, 会遇到一个问题.如图所示
![](//upload-images.jianshu.io/upload_images/570808-c84933b42f7c67c2.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
那么要如何过滤掉拼音呢,这里我用了两种方法.
第一种,是直接用UISearchBar, 但是这又引来一个问题, 很难控制UISearchBar里面UITextField的大小.而且苹果封装了UISearchBar是不对外提供控制这个的接口, 这样就比较蛋疼, 如果用暴力的获取, 后面如果内部发送变化, 就要做版本兼容.
第二种方法,就是依然使用UITextField, 那么如何改进呢.通过苹果的官方文档.想出了一种办法.下面介绍原理.
1.监听每次键盘UITextField输入文字的改变.这边的_searchBar是UITextField
2.判断当前是否有非选中的文字, 如果有则过滤调, 不调用具体的功能.只有没有选中的文字, 才相当于用户输入结束.
其一, 不可能每次UITextField一改变, 就去调用接口, 那样服务器会挂掉.
其二, 根据具体的业务需求, 可以达到过滤选中状态文字, 大部分业务需要的只是非选中状态文字.
UITextField相信很多的iOS开发者都会经常用到, 最近项目中遇到了一个问题.我把UITextField当成搜索框来用了, 结果呢, 用系统自带的键盘输入的时候, 会遇到一个问题.如图所示
那么要如何过滤掉拼音呢,这里我用了两种方法.
第一种,是直接用UISearchBar, 但是这又引来一个问题, 很难控制UISearchBar里面UITextField的大小.而且苹果封装了UISearchBar是不对外提供控制这个的接口, 这样就比较蛋疼, 如果用暴力的获取, 后面如果内部发送变化, 就要做版本兼容.
第二种方法,就是依然使用UITextField, 那么如何改进呢.通过苹果的官方文档.想出了一种办法.下面介绍原理.
UITextField的选中文字
简单的原理: 当我们通过键盘输入的时候, 其实可以看到有些文字是选中状态, 什么是选中状态, 就是有一个带有透明度的黑色框起来.具体可以自己操作看下.而只有我们选中具体有输入的问题, 选中状态的文字才会变成非选中状态的.所以我们可以利用这个原理来过滤选中状态拼音.1.监听每次键盘UITextField输入文字的改变.这边的_searchBar是UITextField
[_searchBar addTarget:self action:@selector(textFieldDidChanged:) forControlEvents:UIControlEventEditingChanged];
2.判断当前是否有非选中的文字, 如果有则过滤调, 不调用具体的功能.只有没有选中的文字, 才相当于用户输入结束.
- (void)textFieldDidChanged:(UITextField *)textField { UITextRange *rang = textField.markedTextRange; // 获取非=选中状态文字范围 BKLog(@"%@", rang); if (rang == nil) { // 没有非选中状态文字.就是确定的文字输入 if ([AppGlobal isEmpty: textField.text]) { }else { NSString *keyword = textField.text; } } }
为什么要过滤选中状态的文字
可能有的人有这个疑问.原因有二.其一, 不可能每次UITextField一改变, 就去调用接口, 那样服务器会挂掉.
其二, 根据具体的业务需求, 可以达到过滤选中状态文字, 大部分业务需要的只是非选中状态文字.
相关文章推荐
- OC_实现UITableviewCell之间的间距
- UILabel自动调整大小(高度,宽度)
- OC_UITableviewCell左滑操作
- UI控件--CardView
- 【Arduino官方教程第一辑】示例程序-目录
- Druid数据库连接池使用
- [iOS]UITableView添加通过xib创建的headerView坑爹问题
- fsck.ext4 unable to resolve 'UUID=a4a7...'
- No 'Access-Control-Allow-Origin' header is present on the requested resource.
- 334. Increasing Triplet Subsequence 动态规划
- generic_make_request函数初探
- YUI api压缩 js/css
- easy touch利用playmaker拖动ngui对象
- iOS中关于UIButton缩进问题
- easyui 初始加载时页面样式乱的解决方法
- 【转】面试题:实现一个队列,这个队列除了有EnQueue, DeQueue操作,还有一个Max操作,三个操作复杂度都是O(1)
- 字符串逆序,字符串转为字符数组 、字符串转字节数组,字节数组转字符串、java中String、StringBuffer、StringBuilder
- QueryRunner使用
- Incorrect integer value: '' for column 'RegNum' at row 1
- UIImageVIew属性值animationImages