2016-06-05 1 views
0

Любой знает, как это сделать? Имея пользовательскую ячейку, подклассом является фрагмент HTML, с пользовательскими классами CSS, которые должны быть там, чтобы окрасить текст в определенные места.Набирая ярлык ячейки с атрибутной строкой из HTML с пользовательскими классами CSS

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView!.dequeueReusableCellWithIdentifier("SearchResCell", forIndexPath: indexPath) as! SearchResCell 

    if self.searchStore != nil && self.searchStore.searchResult.count > 0 && self.searchStore.searchResult[0].searchResults.count > 0 { 
     let searchRes = searchStore.searchResult[0].searchResults[indexPath.row] 

     cell.titleLabel.text = searchRes.displayTitle 
     cell.titleLabel.textColor = UIColor.blueColor() 

     let attrResult = try! NSAttributedString(
      data: searchRes.wordsClean.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
      options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
      documentAttributes: nil) 
     cell.subtitleLabel.attributedText = attrResult 
     cell.subtitleLabel.textAlignment = NSTextAlignment.Right 

    } 

    return cell 
} 

В attrResult есть html с классом css (скажем, ABC). Есть ли способ в атрибутной строке сказать, что это класс Foo? или существует ли какой-либо другой способ, кроме как использовать регулярные выражения или манипуляции с строками на каждой строке, которую я получаю из API? это могут быть сотни, и это не мой API, поэтому я не могу изменить теги HTML в нем.

HTML Text Пример:

bla bla bla <span class="HightlightTextClass"> highlighted text </span> more bla bra bra text

"

10x

+0

Вы можете разместить HTML? – Brandon

+0

Попробуйте этот ответ http://stackoverflow.com/a/28132610/5222077 (я не уверен, что он поддерживает cutom css, он может поддерживать встроенный css) – kye

+0

Добавлен пример строки для типа os text, который я получаю от API, класс в span - это выделение текста для этого диапазона, и мне нужно выделить тот же текст ... 10x – Erez

ответ

1

Вы можете попытаться вставить пользовательский style тег с помощью regex или аналогичный, или вы можете настроить шрифт, цвет, цвет фона и т. д., фактически используя атрибут документа s атрибутной строки.

+0

, так что нет способа управлять классом в NSHTMLTextDocumentType? – Erez

+0

10x, я опубликовал решение, основанное на ваших предложениях, поэтому я дал вам точку – Erez

0

Если какой-либо из заинтересованных это полное решение этой проблемы, работал как шарм для меня:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView!.dequeueReusableCellWithIdentifier("SearchResCell", forIndexPath: indexPath) as! SearchResCell 

    if self.searchStore != nil && self.searchStore.searchResult.count > 0 && self.searchStore.searchResult[0].searchResults.count > 0 { 
     let searchRes = searchStore.searchResult[0].searchResults[indexPath.row] 

     cell.titleLabel.text = searchRes.displayTitle 
     cell.titleLabel.textColor = UIColor.blueColor() 

     if let regex = try? NSRegularExpression(pattern: "class=\"hlt\"", options: .CaseInsensitive) { 
      let modStr = regex.stringByReplacingMatchesInString(searchRes.wordsClean, options: .WithTransparentBounds, range: NSMakeRange(0, searchRes.wordsClean.characters.count), withTemplate: "style=\"background-color:#F7DB6A\"") 

      let attrResult = try! NSAttributedString(
       data: modStr.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
       options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
       documentAttributes: nil) 

      cell.subtitleLabel.attributedText = attrResult 
      cell.subtitleLabel.textAlignment = NSTextAlignment.Right 

     } 
    } 

    return cell 
} 
Смежные вопросы