关于iOS对textView字数限制的一些解法

现在的服务器一般是不会对字数做限制的,但是遇到一个需求需要对字数做限制,并且同时更新剩余的字数,也许有些朋友会想着用textField或label来做,单是总是存在一些不完美,或一些其他的问题难解决.


用textField的话,自动换行是个难题,因为他并不提供这个属性.用textView则可以和容易解决,因为textView默认有自动换行这个功能.

实现代码入下:

在viewDidLoad添加方法(记得别忘了顺手添加移除)

//    添加监听方法

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textViewDidChange:) name:UITextViewTextDidChangeNotification object:nil];

监听方法的实现

#pragma mark - 当textField布局发生改变的时候调用

- (void)textViewDidChange:(UITextView *)textView {

//    对占位符的显示和隐藏做判断

if (self.textViewLength.text .length == 0) {

self.ploLabel.text =  @"请输反馈信息";

}else {

self.ploLabel.text = @"";

}

//    读出textView字符长度

self.wordLabelCount.text = [NSString stringWithFormat:@"%lu",200 - self.textViewLength.text .length];

if (self.textViewLength.text .length > 200) {

//        对超出的部分进行剪切

self.textViewLength.text = [self.textViewLength.text substringToIndex:10];

self.wordLabelCount.text = @"0";

}

if (self.textViewLength.text .length >= 200) {

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示!" message:@"亲!最多只能输入200个字!请您合理安排内容!" preferredStyle:UIAlertControllerStyleAlert];

[self presentViewController:alertController animated:YES completion:nil];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self dismissViewControllerAnimated:YES completion:nil];

       });

 }

}

 

#pragma mark - 移除监听方法

- (void)dealloc {

[[NSNotificationCenter defaultCenter]removeObserver:self];

}

这里有一个细节就是将超出的文字给cut掉,就是用到这个方法:     

 对超出的部分进行剪切

self.textViewLength.text = [self.textViewLength.text substringToIndex:10];

并且这个时候要让跟新的数字一直是0

self.wordLabelCount.text = @"0";

为了更好的用户体验,添加提示占位符是必要的,我在这里也做了,顺便连带的说一下,这样才算完整吗.就在上面得代码中:

//    对占位符的显示和隐藏做判断

if (self.textViewLength.text .length == 0) {

self.ploLabel.text =  @"请输反馈信息";

}else {

self.ploLabel.text = @"";

}

 

最后我想说一句:

我很欣赏乔布斯的一句话 ---- 用户体验至上!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值