1.為UITextView添加placeholder
一般在UITextField里面經(jīng)常會(huì)用到placeholder屬性,而UITextView的placeholder屬性卻是私有的,無法直接調(diào)用,怎么辦呢誓篱,當(dāng)然是強(qiáng)大的kvc咯
-(void)setPlaceHolderByKVCWithString:(NSString *)placeholder forTextView:(UITextView *)textView
{
// _placeholderLabel
UILabel *placeHolderLabel = [[UILabel alloc] init];
placeHolderLabel.text = placeholder;
placeHolderLabel.numberOfLines = 0;
placeHolderLabel.textColor = [UIColor lightGrayColor];
[placeHolderLabel sizeToFit];
[textView addSubview:placeHolderLabel];
// same font
textView.font = [UIFont systemFontOfSize:18.f];
placeHolderLabel.font = [UIFont systemFontOfSize:18.f];
[textView setValue:placeHolderLabel forKey:@"_placeholderLabel"];
}
??注意:textview和placeholderLabel的字體要保持一致,否則會(huì)出現(xiàn)凯楔,為輸入之前holder向上偏移的現(xiàn)象窜骄。
2.監(jiān)聽textview的文本改變
??。通過消息機(jī)制來監(jiān)聽文本變化摆屯。uitextview內(nèi)部應(yīng)該是已經(jīng)寫好了post部分的位置邻遏,我們需要加上add方法,當(dāng)文本改變時(shí)虐骑,獲得消息調(diào)用方法准验。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textViewDidChangeText:)
name:UITextViewTextDidChangeNotification
object:_textview];
??:這里object終于不是nil了。監(jiān)聽指定實(shí)際例原來是這么用的呀廷没,厲害厲害糊饱。
- (void)textViewDidChangeText:(NSNotification *)notification
{
UITextView *textView = (UITextView *)notification.object;
NSString *toBeString = textView.text;
}
3.限制輸入字?jǐn)?shù)的方法,支持中文和英文
/**
* 最大輸入長度,中英文字符都按一個(gè)字符計(jì)算
*/;
static int kMaxLength = 38;
UITextView *textView = (UITextView *)notification.object;
NSString *toBeString = textView.text;
// 獲取鍵盤輸入模式
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
// 中文輸入的時(shí)候,可能有markedText(高亮選擇的文字),需要判斷這種狀態(tài)
// zh-Hans表示簡體中文輸入, 包括簡體拼音,健體五筆颠黎,簡體手寫
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮選擇部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字另锋,表明輸入結(jié)束,則對已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
if (!position) {
if (toBeString.length > kMaxLength) {
// 截取子串
textView.text = [toBeString substringToIndex:kMaxLength];
}
} else { // 有高亮選擇的字符串滞项,則暫不對文字進(jìn)行統(tǒng)計(jì)和限制
NSLog(@"11111111111111======== %@",position);
}
} else {
// 中文輸入法以外的直接對其統(tǒng)計(jì)限制即可,不考慮其他語種情況
if (toBeString.length > kMaxLength) {
// 截取子串
textView.text = [toBeString substringToIndex:kMaxLength];
}
}