在開發(fā)中UITextField和UITextview這兩個組件用的是非常頻繁的,而且還要限制輸入框的字?jǐn)?shù)破花,UITextview要設(shè)置placeholder等谦趣,每個控件都要實現(xiàn)代理方法寫相應(yīng)的邏輯代碼。是不是很麻煩座每?
很多新手是這樣寫的:
// 限制字?jǐn)?shù)
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@""]) {
return YES;
}
if (textView.text.length > 5) {
return NO;
}
return YES;
}
這樣寫會有問題前鹅,當(dāng)輸入中文或粘貼字符到文本框時問題就出來了。
為此我重寫了UITextField和UITextview峭梳,實現(xiàn)一句話設(shè)置限制字?jǐn)?shù)和placeholder舰绘。代理用block代替,使用更加方便靈活。
限制字?jǐn)?shù)相關(guān)實現(xiàn)除盏,完美解決剛提到的問題(UITextField和UITextview的實現(xiàn)思路一樣):
if (self.limitLength > 0) { // 限制長度
//獲取高亮部分
UITextRange *selectedRange = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計和限制
if (!position)
{
if (toBeString.length > self.limitLength)
{
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:self.limitLength];
if (rangeIndex.length == 1)
{
textView.text = [toBeString substringToIndex:self.limitLength];
}
else
{
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, self.limitLength)];
textView.text = [toBeString substringWithRange:rangeRange];
}
}
}
}
效果圖:
效果圖
使用:
JHTextField *textField = [[JHTextField alloc] initWithFrame:CGRectMake(50, 50, 300, 44)];
textField.limitLength = 5;
textField.placeholder = @"請輸入~";
textField.layer.borderWidth = 1;
textField.layer.borderColor = [UIColor lightGrayColor].CGColor;
[self.view addSubview:textField];
JHTextView *textView = [[JHTextView alloc] initWithFrame:CGRectMake(50, 120, 300, 200)];
textView.limitLength = 10;
textView.placeholder = @"請輸入~";
textView.layer.borderWidth = 1;
textView.layer.borderColor = [UIColor lightGrayColor].CGColor;
[self.view addSubview:textView];
self.textView = textView;
demo地址:https://github.com/iOSHJH/InputView
另外說到輸入框必然就會想到鍵盤擋住輸入框怎么辦挫以?為此我隆重介紹一個輕量級的鍵盤管理器者蠕,一句話設(shè)置當(dāng)前控制器的view跟隨鍵盤起伏,媽媽再也不用擔(dān)心鍵盤擋住輸入框了掐松,地址:http://www.reibang.com/p/8b5112d2369c
有問題歡迎issues踱侣,若項目對你有用還望不吝給個star讓我動力十足??