今天看到技术交流群有朋友问一个关于文本框输入文字后,label提示剩余字数的问题,我想想自己也没做过,刚好有时间,那就自己实现下,想想应该是不难,结果是给自己挖了个坑跳,悲剧。
现在我把正确的思路贴上,待会有空讲讲过程出现的坑。
1对文本框的限制
文本框的限制当然是在textfield的代理方法中去实现
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//计算剩下多少文字可以输入
if(range.location >= 20)
{
return NO;
}
else
{
return YES;
}
}
2提示文字如何实现,我用的是通知,记得使用通知要记得移除
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.fzCollectionView];
[self.view addSubview:self.textField];
[self.view addSubview:self.tipLabel];
self.fzCollectionView.sections = self.dataSource;
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFieldChange) name:UITextFieldTextDidChangeNotification object:nil];
}
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)textFieldChange
{
if (self.textField.text.length == 0) {
self.remainTextNum = 20;
}else{
self.remainTextNum = 20 - (int)self.textField.text.length;
}
self.tipLabel.text = [NSString stringWithFormat:@"还可以输入%d个字符",self.remainTextNum];
}
以上就可以轻松实现了,但是我一开始把提示剩余文字的代码也写到代理里面了,导致提示剩余文字偶尔不对,会偏差一位,那问题出在哪里,就是在range.location这里,感兴趣的同学自己去挖个坑跳跳,我这里就不说怎么坑了。