我需要逐字逐句地突出显示

时间:2017-01-16 06:38:26

标签: ios objective-c swift swift3

我需要突出显示单词的应用。它就像有声读物和读物。突出阿拉伯语文本。

有一些方法可以突出显示标签中的特定子字符串,但我不想这样做。我想要类似的东西。让我们考虑下面的发送。

"我是iOS开发人员&我在BEE Technologies"

工作

现在,我要说的是,突出显示字符编号

1-1,   -> I
3-4,   -> am
6-7,   -> an
9-11,  ->iOS
13-21, ->Developer

因为我认为没有办法简单地逐字逐句突出显示直到行尾。

1 个答案:

答案 0 :(得分:2)

这是一个通用的解决方案,它可能不是最好的解决方案,但至少它适用于我,因为它应该......

我 - 几乎 - 面对同样的情况,我为实现它所做的(考虑这些是要做的步骤):

  • 创建范围数组:我计算了每个单词的范围并将它们添加到数组中,以便在确定应突出显示哪个单词(范围)时更容易。例如,当您突出显示“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秒之间突出显示,现在你可以检查0 {1之间的cuurentSecond是否突出显示“I” ,如果介于2和3之间以突出显示“am”等等......

  • 使用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?

希望这有助于......