TAG

RSS订阅

收藏本站

设为首页

当前位置:主页 > 移动开发 > IOS开发 >

IOS 替换 UITextViews 文本 attributed string

发布时间:2016-01-20 20:14 类别:IOS开发

我有一个UITextView,当用户输入文本,我想格式化在飞行中的文本。喜欢的东西语法高亮显示...
 
为此,我想使用的UITextView...
 
一切工作正常期望一个问题:我从文本视图的文本,并作出NSAttributedString从它。我做一些编辑这归因字符串,并将其设置回为textView.attributedText。
 
这发生在每次用户类型。所以,我一定要记住编辑以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;
}

解决方案:

我不知道这是正确的解决方案,但它的工作原理。
格式化文本之前只需禁用滚动和格式化后启用
- (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;
}

猜你会喜欢....

Copyright © 2015 www.wahenzan.com 哇!很赞 版权所有 浙ICP备14030256号-1 Power by DedeCms

浙公网安备 33010602005986号

声明:本站所有文章除标明原创外,均来自网络转载,版权归原作者所有,如果有侵犯到您的权益,请联系本站删除 网站管理员:758763728

360网站安全检测平台