博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一句话设置UITextField、UITextview的字数限制和placeholder
阅读量:6352 次
发布时间:2019-06-22

本文共 2209 字,大约阅读时间需要 7 分钟。

在开发中UITextField和UITextview这两个组件用的是非常频繁的,而且还要限制输入框的字数,UITextview要设置placeholder等,每个控件都要实现代理方法写相应的逻辑代码。是不是很麻烦?

很多新手是这样写的:

// 限制字数- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {    if ([text isEqualToString:@""]) {        return YES;    }    if (textView.text.length > 5) {        return NO;    }    return YES;}复制代码

这样写会有问题,当输入中文或粘贴字符到文本框时问题就出来了。

#为此我重写了UITextField和UITextview,实现一句话设置限制字数和placeholder。代理用block代替,使用更加方便灵活。

限制字数相关实现,完美解决刚提到的问题(UITextField和UITextview的实现思路一样):

if (self.limitLength > 0) { // 限制长度        //获取高亮部分        UITextRange *selectedRange = [textView markedTextRange];        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制        if (!position)        {            if (toBeString.length > self.limitLength)            {                NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:self.limitLength];                if (rangeIndex.length == 1)                {                    textView.text = [toBeString substringToIndex:self.limitLength];                }                else                {                    NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, self.limitLength)];                    textView.text = [toBeString substringWithRange:rangeRange];                }            }        }    }复制代码

效果图:

效果图

使用:

JHTextField *textField = [[JHTextField alloc] initWithFrame:CGRectMake(50, 50, 300, 44)];    textField.limitLength = 5;    textField.placeholder = @"请输入~";    textField.layer.borderWidth = 1;    textField.layer.borderColor = [UIColor lightGrayColor].CGColor;    [self.view addSubview:textField];    JHTextView *textView = [[JHTextView alloc] initWithFrame:CGRectMake(50, 120, 300, 200)];    textView.limitLength = 10;    textView.placeholder = @"请输入~";    textView.layer.borderWidth = 1;    textView.layer.borderColor = [UIColor lightGrayColor].CGColor;    [self.view addSubview:textView];    self.textView = textView;复制代码

demo地址:

另外说到输入框必然就会想到键盘挡住输入框怎么办?为此我隆重介绍一个轻量级的键盘管理器,一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了,地址:

有问题欢迎issues,若项目对你有用还望不吝给个star让我动力十足?

转载地址:http://somla.baihongyu.com/

你可能感兴趣的文章
思科表态反对网络中立
查看>>
《HTML5+CSS3网页设计入门必读》——1.5 利用多种Web浏览器执行测试
查看>>
Velocity官方指南-容器
查看>>
国家为何如此重视石墨烯?
查看>>
《Python和Pygame游戏开发指南》——1.14 配套网站上的更多信息
查看>>
Kafka+Flink 实现准实时异常检测系统
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>