IOS textField限制字节长度
OC语言中,NSString类型的字符串,视英文字母和汉字都为一个长度(string.length把一个汉字也当做一个长度),而实际上,一个英文字母只占用1个字节,一个汉字占用2个字节。
有时又有需求,需要限定字节数目,而不是内容个数,就需要通过一些方法获取到字符串的字节数。比如,限定10个字节,则最多可以输入10个英文字母,或者5个汉字。
监听textField的长度变化,就需要设置textField的代理。
但是有个bug,监听内容变化的代理方法
-(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string
在点击键盘输入是正常的,但如果不点击键盘按键,拿汉字输入举例,输入一个字后,键盘上面会出现与该字可能是词语的字,点上面出现的字来输入,就不会触发上面的代理方法。
所以这个代理方法不能用,我们需要通过注册textField的通知来监听。
//注册通知,textfield内容改变调用 [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFieldDidChange:)name:UITextFieldTextDidChangeNotificationobject:self.testTextField];
实现通知方法
-(void)textFieldDidChange:(NSNotification*)note{
UITextField*textField=note.object;
//获取文本框内容的字节数
intbytes=[selfstringConvertToInt:self.testTextField.text];
//设置不能超过32个字节,因为不能有半个汉字,所以以字符串长度为单位。
if(bytes>16)
{
//超出字节数,还是原来的内容
self.testTextField.text=self.lastTextContent;
}
else
{
self.lastTextContent=self.testTextField.text;
}
}
//得到字节数函数
-(int)stringConvertToInt:(NSString*)strtemp
{
intstrlength=0;
char*p=(char*)[strtempcStringUsingEncoding:NSUnicodeStringEncoding];
for(inti=0;i<[strtemplengthOfBytesUsingEncoding:NSUnicodeStringEncoding];i++)
{
if(*p){
p++;
strlength++;
}
else{
p++;
}
}
return(strlength+1)/2;
}
如果textField一开始就有内容,就要获取到,用代理方法
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
self.lastTextContent=textField.text;
returnYES;
}
以上所述是小编给大家介绍的IOStextField限制字节长度的相关内容,希望对大家有所帮助。