在特定范围内动态更新UITextView内容

时间:2014-11-21 11:46:33

标签: ios objective-c uitextview text-to-speech

我需要在播放TTS时动态更新UiTextView内容中的单词而不刷新页面。

问题:在为每个单词委托(willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance)播放时,正在调用。 所以那时我正在使用NSMutableAttributedString更新文本颜色。

在此过程中,textview中的内容不稳定,因为每个单词页面都在刷新。

所以我需要在不刷新页面的情况下更新textview中的文本。

我写了这样的代码。

  

NSMutableAttributedString * attrStr = [[NSMutableAttributedString   alloc] initWithString:_theContent];

     

[attrStr addAttribute:NSFontAttributeName value:[UIFont   systemFontOfSize:self.fontSize] range:[self wholeArticleRange]];

     

[attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor   redColor] range:theRange];

     

textview.attributedText = attrStr;

- 在android中我们使用 spannable class 来做这种方式。在IOS中有这样的课吗?

请尽快给我们解决方案

提前致谢。

3 个答案:

答案 0 :(得分:2)

我写了这样的代码。我是IOS的新手,所以如果我错了,请帮助我。

  
      
  • (NSMutableDictionary *)attDict {

         

    if(!_attDict){       _attDict = [NSMutableDictionary dictionary];

    UIFont *font = [UIFont systemFontOfSize:self.fontSize];
    // UIFont *font = [UIFont fontWithName:@"TimesNewRomanPSMT" size:self.fontSize];
     [_attDict setObject:font forKey:NSFontAttributeName];
    [_attDict setObject:[UIColor blueColor] forKey:NSForegroundColorAttributeName];
    
         

    }   return _attDict; }

         

    [[displaysArticleView contentView] .textStorage   setAttributes:self.attDict range:theRange];

  •   

由于

答案 1 :(得分:1)

您可以访问textStorage类型的文本视图的NSTextStorage属性,该属性是NSMutableString的子类。从那里你可以使用任何NSMutableString操作,包括设置各种范围的属性,而不向文本视图发送一个全新的字符串(这会使它闪烁)。

如果您必须拨打多个电话,请不要忘记致电beginEditingendEditing将编辑内容组合在一起,以提高效果。

答案 2 :(得分:0)

如果您只是想要将UITextField中的任何文本替换为其他文本,您可以使用字符串替换方法,如

[textField.text stringByReplacingOccurrencesOfString:@"your string" withString:@"string to be replaced"];

这将替换所有出现的目标(要替换的字符串)字符串和替换。