2017-01-16 93 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

我已經做到了,現在我堅持遞歸調用。 –