文档章节

iOS开发技巧(系列五-再谈TextField的一些内容)

召唤攻城狮
 召唤攻城狮
发布于 2014/04/26 09:34
字数 868
阅读 2637
收藏 1

之前一篇博客UITextField的一些技巧总结,已经总结过UITextField使用的一些情况,后来又遇到一些新的需求,所以在此重写一篇,记录UITextField的新的使用需求和技巧。

1、一次性删除TextField文字内容

在登录注册界面,我们在TextField输入框中重新输入用户名的时候,需要删除之前的用户名,这时候就要按住删除按键,逐个删除。TextField可以设置一次性删除输入框中的内容,以xib拖动一个UITextField为例,在其属性设置中选择clear Button的模式,如下图

上面我选择的模式Appears while editing表示,只要是在编辑状态下就可以一次性删除,也就是说只要该TextField处于键盘的第一响应者(firstResponder)时候。当TextField处于编辑状态时候,该输入框后面有一个浅灰色的叉叉按钮,点击按钮就可以删除输入框中的内容。

当然代码也可以实现,

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

2、限制用户输入文字内容的长度

之前做了一个功能,就是要求限制用户在密码输入框中输入12位长度以内的密码,如果超出,则不显示,也就是不能再输入了。当时在往上面找了很多的实现方式,发现都不能实现我想要的效果,因为如果是英文状态下,那很好判断;但是如果键盘模式是中文状态,那么就会出现问题,比如你输入“天气真好啊”,然后按return按键,这时候直接把对应的拼音给输入到了输入框中,超过了12个长度限制,这时候又会发现新的bug,就是超过了长度之后,也不能删除输入框中的内容。这样的代码放到项目中肯定要被老板和客户给骂死了,后来在一片中文博客中找到了解决方案,原文链接在此,主要代码如下,

在viewDidLoad中注册一个监听TextField输入框改变的监听事件,

- (void)viewDidLoad

{

    [super viewDidLoad];

   [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)

                                                name:UITextFieldTextDidChangeNotification

                                              object:userClientTF];

}

实现监听的方法,

-(void)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 = [textField positionFromPosition: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];

        }

    }

}

在dealloc中注销监听事件,

- (void)dealloc {

    [[NSNotificationCenter defaultCenter]removeObserver:self

                                                   name:UITextFieldTextDidChangeNotification

                                                 object:userClientTF];

    [super dealloc];

}

这样的代码层次结构看起来很简单,主要就是其中的算法逻辑,有兴趣的朋友可以好好研究下,我只是把别人的代码拷贝过来直接使用了,应该还可以更加优化。这里只是抛砖引玉。

本人建了一个ios交流群188647173,有兴趣的可以加群进来相互交流。

© 著作权归作者所有

共有 人打赏支持
召唤攻城狮
粉丝 183
博文 53
码字总数 49671
作品 0
玉林
私信 提问
那些在学习iOS开发前就应该知道的事(part 1)

英文原文:Things I wish I had known before starting iOS development—Part 1 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了。这个界面模...

TomatosX
2015/06/12
0
0
iOS 开发之一些著名开发者博客

国内 王巍 王巍目前在日本横滨任职于 LINE。工作内容主要进行 Unity3D 开发,8小时之外经常进行 iOS/Mac 开发。他的陈列柜中已有多款应用,其中番茄工作法工具非常棒。 博客 池建强 池建强,...

maskmale
02/25
0
0
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
iOS使用Objective-c自定义cordova插件(-)

本系列教程为博主初次使用开发,内容如有差错,欢迎指正,敬请谅解。 博客地址:http://blog.img421.com/iosshi-yong-object-czi-ding-yi-cordovacha-jian/ Mac安装ionic和cordova我们已经熟悉,...

Michaelyn
2017/10/23
0
0
Flutter完整开发实战详解(三、 打包与填坑篇)

作为系列文章的第三篇,继篇章一和篇章二之后,本篇将为你着重展示:Flutter开发过程的打包流程、APP包对比、细节技巧与问题处理。本篇主要描述的Flutter的打包、在开发过程中遇到的各类问题...

恋猫月亮
08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

get和post详解

get和post是表单提交的两种方式,get请求数据通过域名后缀URL传送,用户可见,不安全,post请求数据通过在请求报文正文里传输,相对比较安全。get是通过URL传递表单值,post通过URL看不到表单...

青衣霓裳
30分钟前
1
0
linux-如何快速替换IP

在Linux在做高可用的时候,经常会使用到虚拟IP。在windows上一个网卡可以配置两个IP,在Linux直接使用ip命令就可以添加了。 添加 ip address add 192.168.1.200/24 broadcast 192.168.1.255 ...

Linux就该这么学
35分钟前
0
0
Unix-Linux 编程实践教程 第五章 小结

设备文件中用逗号连接起来的两个数字为主设备号和从设备号。主设备号确定实际的设备驱动程序,从设备号作为参数。 如下图中的,主设备号-4,从设备号-2 设备文件中的i-node存储的是指向内核子...

Explorer0
38分钟前
1
0
virtual box centos7 挂载进行文件和共享使用说明

一、virtualbox共享文件夹无访问权限问题解决方法 (转载 http://www.cnblogs.com/zhuguanhao/p/6192777.html) 这篇文章主要介绍了virtualbox共享文件夹无访问权限问题解决方法,造成这个问题...

mbzhong
40分钟前
1
0
Rabbitmq---消息队列

一 . MQ:message queue   消息队列的作用:   1 通信解耦   2 高峰限流 原理分析: 一开始,认证系统是强耦合的,A系统传递认证系统消息接收计算结果的过程中   1 传给认证系统   2 认...

Ala6
44分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部