UITextView自定义文字属性后 光标自动跳到末尾的问题
程序员文章站
2022-06-09 20:12:40
在使用 UITextView 控件中,我们经常需要自定义文字的大小、行间距等属性,让用户输入文字时可以按照设置好的文字属性显示。- (void)textViewDidChange:(UITextView *)textView { // 设置content格式 // 字体 UIFont *font = self.font; // 设置格式属性 NSMutableParagraphStyle *paragraphStyle = [[NSMutabl...
在使用 UITextView 控件中,我们经常需要自定义文字的大小、行间距等属性,让用户输入文字时可以按照设置好的文字属性显示。
- (void)textViewDidChange:(UITextView *)textView {
// 设置content格式
// 字体
UIFont *font = self.font;
// 设置格式属性
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = lineSpace; //行间距
paragraphStyle.firstLineHeadIndent = font.pointSize * indentNumber; //首行缩进宽度
paragraphStyle.alignment = NSTextAlignmentJustified;
NSDictionary *attributes = @{
NSFontAttributeName:font,
NSParagraphStyleAttributeName:paragraphStyle
};
self.attributedText = [[NSAttributedString alloc] initWithString:self.text attributes:attributes];
}
只是实现了上述操作后,我发现了一个奇怪的问题,如果在已经存在的文字中间添加文字,每次输入之后光标都会提动跳到末尾去。最后只能通过代码控制光标的位置,来解决了这个问题。
// 记录当前光标
NSUInteger loc = self.selectedRange.location;
NSUInteger len = self.selectedRange.length;
// 字体
UIFont *font = self.font;
// 设置格式属性
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = lineSpace; //行间距
paragraphStyle.firstLineHeadIndent = font.pointSize * indentNumber; //首行缩进宽度
paragraphStyle.alignment = NSTextAlignmentJustified;
NSDictionary *attributes = @{
NSFontAttributeName:font,
NSParagraphStyleAttributeName:paragraphStyle
};
self.attributedText = [[NSAttributedString alloc] initWithString:self.text attributes:attributes];
// 重设之前光标
// 解决设置了属性后 光标自动跳转到最后的问题
self.selectedRange = NSMakeRange(loc, len);
// 并设置textview滚动到光标位置
// 解决因之前光标跳转到最后 导致的问题
[self scrollRangeToVisible:self.selectedRange];
本文地址:https://blog.csdn.net/wangooo/article/details/108817258