【发布时间】:2013-05-18 23:11:25
【问题描述】:
我有一个UITextView,当用户在其中输入文本时,我想即时格式化文本。语法高亮之类的...
为此,我想使用UITextView...
除了一个问题,一切正常:我从文本视图中获取文本并从中创建一个NSAttributedString。我对此属性字符串进行了一些编辑,并将其设置回textView.attributedText。
每次用户键入时都会发生这种情况。所以我必须在编辑之前记住selectedTextRange attributedText 并在之后将其设置回来,以便用户可以在他之前输入的位置继续输入。唯一的问题是,一旦文本长到需要滚动,如果我输入缓慢,UITextView 现在将开始滚动到顶部。
这里是一些示例代码:
- (void)formatTextInTextView:(UITextView *)textView
{
NSRange selectedRange = textView.selectedRange;
NSString *text = textView.text;
// This will give me an attributedString with the base text-style
NSMutableAttributedString *attributedString = [self attributedStringFromString:text];
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];
NSArray *matches = [regex matchesInString:text
options:0
range:NSMakeRange(0, text.length)];
for (NSTextCheckingResult *match in matches)
{
NSRange matchRange = [match rangeAtIndex:0];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:matchRange];
}
textView.attributedText = attributedString;
textView.selectedRange = selectedRange;
}
有没有不直接使用CoreText的解决方案?我喜欢UITextViews 选择文本等功能......
【问题讨论】:
标签: ios uitextview core-text nsattributedstring