现在的服务器一般是不会对字数做限制的,但是遇到一个需求需要对字数做限制,并且同时更新剩余的字数,也许有些朋友会想着用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 = @"";
}
最后我想说一句:
我很欣赏乔布斯的一句话 ---- 用户体验至上!