2017-01-16 118 views
0

我有一个应用程序,我需要突出显示单词。这就像有声读物&突出阿拉伯文字。我需要突出显示单词

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

“我是一名iOS开发&我BEE技术工作”

现在,我想要什么,我会说,突出人物数

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

因为我不认为有任何方法来简单地保持突出显示逐字直到行尾。

+2

检查这个http://stackoverflow.com/questions/25207373/changing-specific-texts-color-using-nsmutableattributedstring-in-swift可以实现这通过确定NSRange来使用'NSAttributedText'。 – iphonic

回答

1

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

我-almost-面临同样的情况下,我做了什么,以实现它(考虑,这些步骤来执行):

  • 创建范围的数组:我计算每个字的范围和将它们添加到一个数组让它确定哪个字(范围)时更容易应该突出显示。例如,当你要突出“我”,你应该强调这是在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:你应该用它做实际的高亮显示的词(如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?

希望这有助于...

+0

感谢兄弟,这确实有帮助。你能否告诉我你是如何捕捉一段中所有单词的范围的。 –

+0

@AbuEesa很高兴帮助,检查我编辑的答案,我添加了一个代码段,应该对你有所帮助:) –

+0

我已经做到了,现在我坚持递归调用。 –