gpt4 book ai didi

IOS textField限制字节长度

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章IOS textField限制字节长度由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

OC语言中,NSString类型的字符串,视英文字母和汉字都为一个长度(string.length把一个汉字也当做一个长度),而实际上,一个英文字母只占用1个字节,一个汉字占用2个字节.

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

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

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

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

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

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

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

实现通知方法 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- ( 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一开始就有内容,就要获取到,用代理方法 。

?
1
2
3
4
5
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
self.lastTextContent = textField.text;
return YES;
}

以上所述是小编给大家介绍的IOS textField限制字节长度的相关内容,希望对大家有所帮助.

最后此篇关于IOS textField限制字节长度的文章就讲到这里了,如果你想了解更多关于IOS textField限制字节长度的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com