我有一個應用程序,我需要突出顯示單詞。這就像有聲讀物&突出阿拉伯文字。我需要突出顯示單詞
有些方法可以從標籤中突出顯示特定的子字符串,但我不希望這樣。我想要類似的東西。讓我們考慮下面的問題。
「我是一名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