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

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

我需要在不刷新页面的情况下在播放 TTS 时动态更新 UiTextView 内容中的文字。

问题:当 tts 播放每个单词时,委托(delegate) (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中有这样的类吗?

请尽快给我们解决方案

提前致谢。

最佳答案

您可以访问 TextView 的 textStorage 属性,类型为 NSTextStorage,它是 NSMutableString 的子类。从那里您可以使用任何 NSMutableString 操作,包括在各种范围内设置属性,而无需将全新的字符串发送到 TextView (这会使其闪烁)。

如果您必须进行多次调用,请不要忘记调用 beginEditingendEditing 将编辑分组在一起,以提高性能。

关于ios - 在特定范围内动态更新 UITextView 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27060657/

相关文章:

iphone - 我目前在控制台 : 中收到此崩溃日志

android - Flutter布局不一致

ios Facebook 登录按钮 - 不会更改为注销

ios - 更改了子字符串的颜色,但字体设置已重置

iphone - 动态 UIScrollView 中的动态 UITextView - iOS

ios - 使用 Firestore 中的数据填充 TableView

ios - 包含应用程序剪辑的 Xcode 项目导出存档错误

ios - Mapkit中如何获取Annotation索引?

objective-c - UICollectionView 必须使用非零布局参数进行初始化

iphone - UITextView 委托(delegate)方法