關於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 = @"";
}
最後我想說一句:
我很欣賞喬布斯的一句話 ---- 使用者體驗至上!