iOS 限制textField字节长度详解手机开发
2023-06-13 09:20:07 时间
OC语言中,NSString类型的字符串,视英文字母和汉字都为一个长度(string.length把一个汉字也当做一个长度),而实际上,一个英文字母只占用1个字节,一个汉字占用2个字节。
有时又有需求,需要限定字节数目,而不是内容个数,就需要通过一些方法获取到字符串的字节数。比如,限定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; }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/3333.html
服务器部署程序员系统优化网站设置运维相关文章
- iOS小技能:设置tableView的点击事件优先级低于cell的选中事件
- 关于iOS打包出现的两例常见问题
- iOS 获取本地图片尺寸_ios图片处理软件
- iOS锁屏时钟_ios时钟怎么调
- 如何最简洁的使用iOS 开发证书 和 Profile 文件
- iOS 上传AppStore 被拒汇总
- AnyTrans for iOS for mac(ios数据传输管理工具)
- iOS动画总结详解手机开发
- iOS–NSDate的基本操作和常用核心功能详解手机开发
- iOS—数据本地化详解手机开发
- ios基础:iOS改变状态栏字体颜色详解手机开发
- 探索Linux系统:在iOS上下载(linux系统ios下载)
- 在iOS上搭建MySQL数据库连接(ios连接mysql数据库)
- Linux下开发iOS应用:挑战还是机会?(linux做ios开发)
- 你好小娜 再见小娜!微软宣布明年年初开始结束对安卓和iOS版小娜的支持
- 苹果推送 iOS/iPadOS 15 首个公测版 Beta 更新
- 苹果 iOS/iPadOS 15、macOS 12、watchOS 8 公测版 Beta 4 更新发布
- 平台开发iOS开发:基于Linux平台的世界(ios基于linux)
- iOS访问MySQL数据库的实战技术(ios访问mysql)
- Google的J2ObjC工具可以将Java代码转换为iOS的Objective-C
- 难道是参与用户太少?苹果正在邀请更多用户参与iOS 15预览版测试
- IOS上可以安装Oracle吗(ios能装oracle吗)
- 移动端iOS技术实现Oracle数据库连接(ios联接oracle)
- iOS 轻松登录 Oracle 数据库(ios 登陆oracle)
- 使用iOS就能操作Oracle数据库(ios上oracle)
- 谁说 iOS 就不适用Oracle(ios oracle软件)
- 苹果 iOS 15/iPadOS 15 开发者预览版 Beta 6 发布:删除 SharePlay,重新设计 Safari 浏览器(附更新内容大全)