IOS之textField限制字节长度的实现方法

来源:爱站网时间:2019-02-28编辑:网友分享
在项目开发过程中,将NSString类型的字符串视为英文字母和中文字符的一个长度,事实上,一个英文字母只需要一个字节,一个汉字只需要两个字节,下文是爱站技术频道小编为您整理的IOS之textField限制字节长度的实现方法,一起进入下文了解一下吧!

在项目开发过程中,将NSString类型的字符串视为英文字母和中文字符的一个长度,事实上,一个英文字母只需要一个字节,一个汉字只需要两个字节,下文是爱站技术频道小编为您整理的IOS之textField限制字节长度的实现方法,一起进入下文了解一下吧!

有时又有需求,需要限定字节数目,而不是内容个数,就需要通过一些方法获取到字符串的字节数。比如,限定10个字节,则最多可以输入10个英文字母,或者5个汉字。

监听textField的长度变化,就需要设置textField的代理。

但是有个bug,监听内容变化的代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

在点击键盘输入是正常的,但如果不点击键盘按键,拿汉字输入举例,输入一个字后,键盘上面会出现与该字可能是词语的字,点上面出现的字来输入,就不会触发上面的代理方法。

所以这个代理方法不能用,我们需要通过注册textField的通知来监听。

//注册通知,textfield内容改变调用
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.testTextField];

实现通知方法

- (void)textFieldDidChange:(NSNotification *)note{
UITextField *textField = note.object;
//获取文本框内容的字节数
int bytes = [self stringConvertToInt:self.testTextField.text];
//设置不能超过32个字节,因为不能有半个汉字,所以以字符串长度为单位。
if (bytes > 16)
{
//超出字节数,还是原来的内容
self.testTextField.text = self.lastTextContent;
}
else
{
self.lastTextContent = self.testTextField.text;
}
}
//得到字节数函数
- (int)stringConvertToInt:(NSString*)strtemp
{ 
int strlength = 0; 
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++)
{ 
if (*p) { 
p++; 
strlength++; 
} 
else { 
p++; 
}
}
return (strlength+1)/2;
}

如果textField一开始就有内容,就要获取到,用代理方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
self.lastTextContent = textField.text;
return YES;
}

以上是IOS之textField限制字节长度的实现方法,希望能对您有所帮助,也希望大家继续支持爱站技术频道!

上一篇:实例解析iOS应用多线程开发中NSthread类的用法

下一篇:详解IOS图层转场动画

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载