UITextView 的使用
一、输入汉字时字数统计
开发中这样的需求也不少见,需要实时统计textView中输入的字数。 常规的做法就是设置textView的delegate,实现delegate中的
- (void)textViewDidChange:(UITextView *)textView
然后统计输入文字的个数。
NSInteger maxFontNum = 200;//最大输入限制
NSString *toBeString = textView.text;
// 获取键盘输入模式
NSString *lang = [[UIApplication sharedApplication] textInputMode].primaryLanguage;
if ([lang isEqualToString:@"zh-Hans"]) { // zh-Hans代表简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > maxFontNum) {
textView.text = [toBeString substringToIndex:maxFontNum];//超出限制则截取最大限制的文本
self.remarksCountLabel.text = [NSString stringWithFormat:@"%ld/200",(long)maxFontNum];
} else {
self.remarksCountLabel.text = [NSString stringWithFormat:@"%lu/200",(unsigned long)toBeString.length];
}
}
} else {// 中文输入法以外的直接统计
if (toBeString.length > maxFontNum) {
textView.text = [toBeString substringToIndex:maxFontNum];
self.remarksCountLabel.text = [NSString stringWithFormat:@"%ld/200",(long)maxFontNum];
} else {
self.remarksCountLabel.text = [NSString stringWithFormat:@"%lu/200",(unsigned long)toBeString.length];
}
}
根据键盘类型进行判断,如果输入的是中文,则判断是否为高亮文字即连续输入的拼音,如果不是高亮的则直接进行字数统计,否则不作处理,这样就解决了字数统计的问题。
二、UITextView 动态高度
UITextView的动态高度,取决于输入字符的变化,因此我们可以还在
- (void)textViewDidChange:(UITextView *)textView;
方法里处理该业务逻辑。
首先,我们需要将UITextView的scrollEnabled 设置为 NO,这样是为了解决文字换行的时候,文字整体上移然后回落这种不友好的体验。
CGSize textViewSize = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)];
CGRect frame = textView.frame;
frame.size.height = textViewSize.height;
textView.frame = frame;
你也可以使用autoLayout,不在赘述。
三、UITextView 内边距设置
//内容缩进为零(去除左右边距)
textView.textContainer.lineFragmentPadding = 0.0
//去除上下边距
textView.textContainerInset = UIEdgeInsetsZero
== 图片预览 ==