我需要在播放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中有这样的课吗?
请尽快给我们解决方案
提前致谢。
答案 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
操作,包括设置各种范围的属性,而不向文本视图发送一个全新的字符串(这会使它闪烁)。
如果您必须拨打多个电话,请不要忘记致电beginEditing
和endEditing
将编辑内容组合在一起,以提高效果。
答案 2 :(得分:0)
如果您只是想要将UITextField中的任何文本替换为其他文本,您可以使用字符串替换方法,如
[textField.text stringByReplacingOccurrencesOfString:@"your string" withString:@"string to be replaced"];
这将替换所有出现的目标(要替换的字符串)字符串和替换。