我有一个应用程序,我需要在其中突出显示单词。这就像有声读物,可以朗读并突出显示阿拉伯语文本。
有一些方法可以突出显示标签中的特定子字符串,但我不想要那样。我想要类似的东西。让我们考虑以下句子。
“我是一名 iOS 开发人员,我在 BEE Technologies 工作”
现在,我想说的是,突出显示字符数
1-1, -> I
3-4, -> am
6-7, -> an
9-11, ->iOS
13-21, ->Developer
因为我不认为有任何方法可以简单地逐字突出显示直到行尾。
最佳答案
这是一个通用的解决方案,它可能不是最好的解决方案,但至少它对我有用...
我 - 几乎 - 遇到了同样的情况,我做了什么来实现它(考虑这些是要做的步骤):
- 创建范围数组:我计算了每个单词的范围并将它们添加到数组中,以便在确定应突出显示哪个单词(范围)时更容易。例如,当你高亮“I”时,你应该高亮索引为0的范围等等...
这是一个如何生成 NSRange 数组的示例:
let myText = "I am an iOS Developer"
let arrayOfWords = myText.components(separatedBy: " ")
var currentLocation = 0
var currentLength = 0
var arrayOfRanges = [NSRange]()
for word in arrayOfWords {
currentLength = word.characters.count
arrayOfRanges.append(NSRange(location: currentLocation, length: currentLength))
currentLocation += currentLength + 1
}
for rng in arrayOfRanges {
print("location: \(rng.location) length: \(rng.length)")
}
/* output is:
location: 0 length: 1
location: 2 length: 2
location: 5 length: 2
location: 8 length: 3
location: 12 length: 9
*/
使用 Timer :继续检查当前秒数(声明一个变量
cuurentSecond
- 例如 - 并每秒递增 1)。根据当前秒数,您可以确定应突出显示哪个词。 例如:假设“I”应该在 0 到 1 秒之间突出显示,“am”应该在 2 到 3 秒之间突出显示,现在您可以检查cuurentSecond
是否在 0 到 1 之间突出显示“我”,如果在2到3之间高亮显示"is"等等...使用 NSMutableAttributedString :您应该使用它来对单词进行实际突出显示(第一个项目符号中提到的范围)。您还可以查看这些问题/答案以了解如何使用它:
iOS - Highlight One Word Or Multiple Words In A UITextView .
How can I change style of some words in my UITextView one by one in Swift?
希望这对您有所帮助...
关于ios - 我需要一个字一个字地强调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670716/