解决方法:根据UITextField本身提供的事件监听:

  1. [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  2. 这样就可以更好地限制输入长度:
  3. - (void)textFieldDidChange:(UITextField *)textField
  4. {
  5. if (textField == self.titleField) {
  6. if (textField.text.length > 20) {
  7. textField.text = [textField.text substringToIndex:20];
  8. }
  9. }
  10. }

原文:

要限制一个UITextField的输入字数(参考链接),首先想到的应该是通过UITextFieldDelegate的代理方法来限制,比如要设置字数限制为20:

  1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  2. {
  3. if (textField == self.titleField) {
  4. if (textField.length > 20) return NO;
  5. }
  6. return YES;
  7. }

但是这样的限制简单粗暴,可能会影响用户正常逻辑下的输入,比如输入了20个字符后,要退格回删字符。
这时候我们可能会考虑“Detect backspace in UITextField”,比如简单地判断replacementString的长度是否为0。

接着我们可能还会遇到用户已经输入20个字符了,这时候继续输入---不过是选择了部分文本进行替换-----无法进行了,这也妨碍了用户的正常操作,所以限制的代码版本可能会演进为:

  1. #pragma mark - UITextFieldDelegate
  2. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  3. {
  4. if (textField == self.titleField) {
  5. if (string.length == 0) return YES;
  6. NSInteger existedLength = textField.text.length;
  7. NSInteger selectedLength = range.length;
  8. NSInteger replaceLength = string.length;
  9. if (existedLength - selectedLength + replaceLength > 20) {
  10. return NO;
  11. }
  12. }
  13. return YES;
  14. }

到这里可能会觉得基本大功告成了,但是当你输入19个字符后,第20个字符以中文汉字的形式继续输入,那么系统会在键盘上方提供后续的一系列联想词,你会发现通过这种方式可以连续选字输入从而突破20个字符的限制。

到了这里,我们可能会希望有个类似- (void)textFieldDidChange:(UITextField *)textField的回调方法,但可惜没有。当然,我们还可以通过- (void)textFieldDidEndEditing:(UITextField *)textField;回调方法在结束编辑的时候把文本截断,虽然在用户体验上会有点突兀。不过当我们点进去UITextField.h头文件里寻觅上述回调方法而不得时,可能会发现最下面有这么个消息通知名称:

UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;

iOS之UITextField限制字数的更多相关文章

  1. iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing

    ios 8 uitextfield keyboard not appearing //发现在iphone 6 and iPhone plus 上面键盘不出来.后来查了下原来要在模拟器里设置下 var ...

  2. UITextField,UITextView字数限制

    UITextField,UITextView字数限制 主要是使用他们的两个代理方法 //标题限制在 30个字以内 - (BOOL)textField:(UITextField *)textField ...

  3. iOS开发笔记12:iOS7上UITextField限制字数输入导致崩溃问题

    在一些场景中,需要限制用户的输入字数,例如在textField里进行控制(textView也类似,崩溃原因也相同),如图所示 系统会监听文本输入,需要注意的第一点是输入法处于联想输入还未确定提交的时候 ...

  4. iOS UITextField 输入字数限制的实现

    首先你的ViewController需要实现 UITextFieldDelegate 代理, 其次,需要字数限制的UITextField实例的代理要设置成 self(ViewController) 然 ...

  5. UITextField限制字数的方法

    转:http://blog.csdn.net/marujunyy/article/details/9985411 在输入东西的时候,如果想限制最大字数,可以用下面方法: - (BOOL)textFie ...

  6. iOS中UITextField 使用全面解析

    //初始化textfield并设置位置及大小   UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 13 ...

  7. iOS中UITextField 使用全面解析 分类: ios技术 2015-04-10 14:37 153人阅读 评论(0) 收藏

    //初始化textfield并设置位置及大小   UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 13 ...

  8. iOS textfield 限制输入字数长度

    iOS textfield限制输入的最大长度 [self.textFiled addTarget:self action:@selector(textFieldDidChange:) forContr ...

  9. iOS中UITextField常用设置和方法

    //初始化textField并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; // ...

随机推荐

  1. UI设计教程学习分享:APP布局

    一.宫格布局 这种APP信息布局方式也是我们目前最常见的一种方式,也是符合用户习惯和黄金比例的设计方式,最知名的就是锤子手机的界面设计.锤子手机界面设计欣赏知名的APP设计采用的九宫格.六宫格等方式布 ...

  2. openssl_error_string()

    其实已经成功了,openssl_error_string()一样会输出错误信息,忽略就好

  3. 【jdbcTemplate】baseDao书写规范

    今天加班,为了下个月的北京之行,希望父亲身体安康,一切顺利: 老大今天发出来同事的代码,并标记了jdbcTemplate的书写规范,此处查询数据库之前声明对象时,不用new出来,因为在底层源码中已经给 ...

  4. Subarray Sum Equals K LT560

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  5. Quartz入门教程

    public class App { public static void main(String[] args) throws MessagingException, IOException { / ...

  6. Proxmox Reset Root Password

    http://c-nergy.be/blog/?p=1777 Step 1 – Boot your Proxmox VE machine. In the boot menu screen, you s ...

  7. 我们用整整三年时间,建成了一套软件:用户定制系统(UD)

    这是我们花了三年时间,完成了一套软件--用户定制系统(UD) 主要功能就是集中在下面这个界面了 (自己生成自己哦) ============================= 更多详情,请您访问:我们 ...

  8. 矩阵快速幂小结-Hdu2604

    矩阵快速幂可以想象为线性代数的矩阵相乘,主要是运用于高效的计算矩阵高次方. 将矩阵两两分组,若要求a^n,即知道a^(n/2)次方即可,矩阵快速幂便是运用的这个思路. 比方想求(A)^7那么(A)^6 ...

  9. 2019.01.08 codeforces 1009F. Dominant Indices(长链剖分)

    传送门 长链剖分模板题. 题意:给出一棵树,设fi,jf_{i,j}fi,j​表示iii的子树中距离点iii距离为jjj的点的个数,现在对于每个点iii要求出使得fif_ifi​取得最大值的那个jjj ...

  10. 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)

    传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果 ...