ios – 将UITextViews文本替换为归因的字符串

ios – 将UITextViews文本替换为归因的字符串,第1张

概述我有一个UITextView,当用户正在输入文本时,我想即时格式化文本.像语法突出显示… 为了我想使用UITextView … 一切正常工作都有一个问题:我从文本视图中取出文本,并从中创建一个NSAttributedString.我对这个归因字符串进行了一些编辑,并将其设置为textView.attributedText. 每次用户键入时都会发生这种情况.所以我必须记住在编辑之前的selecte 我有一个UITextVIEw,当用户正在输入文本时,我想即时格式化文本.像语法突出显示…

为了我想使用UITextVIEw …

一切正常工作都有一个问题:我从文本视图中取出文本,并从中创建一个NSAttributedString.我对这个归因的字符串进行了一些编辑,并将其设置为textVIEw.attributedText.

每次用户键入时都会发生这种情况.所以我必须记住在编辑之前的selectedTextRange,然后将其重新设置,以便用户可以继续在他之前输入的地方打字.唯一的问题是,一旦文本足够长,需要滚动,如果我慢慢键入,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能够选择文本等等….

解决方法 我不确定这是否是正确的解决方案,但它是有效的.
在格式化文本之前禁用滚动,并在格式化后启用它
- (voID)formatTextInTextVIEw:(UITextVIEw *)textVIEw{    textVIEw.scrollEnabled = NO;    NSRange selectedRange = textVIEw.selectedRange;    Nsstring *text = textVIEw.text;    // This will give me an attributedString with the base text-style    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: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;    textVIEw.scrollEnabled = YES;}
总结

以上是内存溢出为你收集整理的ios – 将UITextViews文本替换为归因的字符串全部内容,希望文章能够帮你解决ios – 将UITextViews文本替换为归因的字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存