IOS中UITextField限制字数,特别是中文

首先,如果只是数字和英文,那只需要实现UITextField或UITextView的Delegate.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.titleField) {
        if (textField.length > 20) return NO;
    }

    return YES;
}

但是这样的限制简单粗暴,可能会影响用户正常逻辑下的输入,比如输入了20个字符后,要退格回删字符。这时候我们可能会考虑“Detect backspace in UITextField”,比如简单地判断replacementString的长度是否为0或者内容是不是""。因为IOS键盘的删除键表示的replacementText是@"",不要问我怎么知道的。。。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{

if ([text isEqualToString:@"\n"]) {

[textView resignFirstResponder];

return NO;

}else if (textView.text.length > 64 &&![text isEqualToString:@""])

{

return NO;

}

else

{

return YES;

}

}

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(messageTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];

- (void)messageTextDidChange:(id)textField {

NSString *string = self.checkMessage.text;

//中文输入法不点击确定,拼音自动带空格 所以这一堆代码只是为了去掉空格计算长度

NSCharacterSet *whitespaces = [NSCharacterSet whitespaceAndNewlineCharacterSet];

NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ‘ ‘"];

NSArray *parts = [string componentsSeparatedByCharactersInSet:whitespaces];

NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];

string = [filteredArray componentsJoinedByString:@""];

if (string.length > 15) {

dispatch_async(dispatch_get_main_queue(), ^{

self.checkMessage.text = [string substringToIndex:15];

});

}

}

不过,监听消息还要记得解除监听,所幸的是UITextField本身提供了相应的事件监听

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField
{
    if (textField == self.titleField) {
        if (textField.text.length > 20) {
            textField.text = [textField.text substringToIndex:20];
        }
    }
}不过最后这种,博主自己也没有试过,大家自行感受一下哈
时间: 2024-11-09 03:08:19

IOS中UITextField限制字数,特别是中文的相关文章

iOS中UITextField的字数限制

刚开始的时候, 采用的是shouldChangeCharactersInRange http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield 这样在输入全部是英文的情况下是可以的. 但是当输入是中文时, 由于shouldChangeCharactersInRange判断的是当前键盘的字符数, 会出现这样的问题: 比如你还剩下2个字可以打, 你想输入"张三", &

[转]iOS中UITextField 使用全面解析

001//初始化textfield并设置位置及大小002  UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];003  004//设置边框样式,只有设置了才会显示边框样式 005  text.borderStyle = UITextBorderStyleRoundedRect;006 typedef enum {007    UITextBorderStyleNone,008   

iOS中UITextField 使用全面解析

//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine, UITextBord

iOS中UITextField和UITextView屏蔽表情符号的输入

起因:云端服务器代码不支持表情符号的输入,所以APP端需要屏蔽掉所有的UITextField和UITextView屏蔽表情符号输入 解决方法:想到两种解决方案,一种是在输入之后过滤掉,网上找了一些过滤的算法,好像都不太好用:另一种屏蔽ios输入表情符输入.(以下解决方法非原创,贴上来是整理记录一下,也给遇到同样问题的人提供一点帮助吧^_^) (1)以textview为例 加入以下代理方法,就禁止了表情符的输入,[UITextInputMode currentInputMode]这个方法已经在io

iOS 限制UITextfield的字数

之前在cocoachina看到一篇文章http://www.cocoachina.com/ios/20160106/14889.html,挺实用的,非常好用,肯定以后可以遇到,登录的时候肯定能遇到 - (void)textFieldTextDidChanged:(UITextField *)sender {     NSString * tempString = sender.text;          if (sender.markedTextRange == nil && tempS

iOS中UITextField用法

//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(0, 40, 150, 30)]; //设置边框样式,只有设置了才会显示边框样式,否则默认是没有边框的 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine,

iOS中UITextField输入判断小数点后两位

在输入金额的UITextField中,要给予三个规则的判断 1. 只能输入数字(可以通过设置键盘类型为Decimal Pad) 2. 小数点只能有一个 3. 小数点后最多有两位数字 (可以通过正则表达式或者长度判断) 2. 和3. 的代码 (首先引入UITextFieldDelegate,指定代理为自己) - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacem

密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题

由于url支持26个英文字母.数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码.iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效. NSString中如果包括中文字符的话转换为NSURL得到的值为nil,用stringByAddingPercentEsc

iOS 中json解析数据出现中文乱码的问题

一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢? 一般都是通过转码来解决,但是直接转码,是不能达到效果的,例如 [jsonStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 这样直接转码是达不到效果的. 解析数据的时候,可以先把数据存放在NSdata对象中,