1. 程式人生 > >關於iOS對textView字數限制的一些解法

關於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 = @"";

}

最後我想說一句:

我很欣賞喬布斯的一句話 ---- 使用者體驗至上!