我有一个应用程序,我需要突出显示单词。这就像有声读物&突出阿拉伯文字。我需要突出显示单词
有些方法可以从标签中突出显示特定的子字符串,但我不希望这样。我想要类似的东西。让我们考虑下面的问题。
“我是一名iOS开发&我BEE技术工作”
现在,我想要什么,我会说,突出人物数
1-1, -> I
3-4, -> am
6-7, -> an
9-11, ->iOS
13-21, ->Developer
因为我不认为有任何方法来简单地保持突出显示逐字直到行尾。
我有一个应用程序,我需要突出显示单词。这就像有声读物&突出阿拉伯文字。我需要突出显示单词
有些方法可以从标签中突出显示特定的子字符串,但我不希望这样。我想要类似的东西。让我们考虑下面的问题。
“我是一名iOS开发&我BEE技术工作”
现在,我想要什么,我会说,突出人物数
1-1, -> I
3-4, -> am
6-7, -> an
9-11, ->iOS
13-21, ->Developer
因为我不认为有任何方法来简单地保持突出显示逐字直到行尾。
这是一个通用的解决方案,它可能是不是最好的,但至少它为我的作品,因为它应该...
我-almost-面临同样的情况下,我做了什么,以实现它(考虑,这些步骤来执行):
下面是如何生成的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秒突出显示,现在您可以检查0到1之间的cuurentSecond
是否突出显示“I”,如果它是2和3之间,以突出“AM”等等......
使用NSMutableAttributedString:你应该用它做实际的高亮显示的词(如INT第一颗子弹提到的范围)。您也可以查看这些问题/答案以了解如何使用它:
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?
希望这有助于...
感谢兄弟,这确实有帮助。你能否告诉我你是如何捕捉一段中所有单词的范围的。 –
@AbuEesa很高兴帮助,检查我编辑的答案,我添加了一个代码段,应该对你有所帮助:) –
我已经做到了,现在我坚持递归调用。 –
检查这个http://stackoverflow.com/questions/25207373/changing-specific-texts-color-using-nsmutableattributedstring-in-swift可以实现这通过确定NSRange来使用'NSAttributedText'。 – iphonic