2016-09-02 1 views
0

У меня есть textView в моем TableViewCell. В Interfacebuilder я установил ссылку, почту и адрес для текстового просмотра. Таким образом, все ссылки, почта и адреса выделены. Текстовое изображение также можно выбрать.Textview с подсветкой ссылки в TableViewCell изменяется tintColor за секунды

Я работаю с autorefresh, поэтому содержимое таблицыViewCell перезагрузит все 30 секунд. Каждый раз, когда это происходит, подсветка исчезает для < 1 секунда, и подсветка возвращается.

Иногда это происходит при инициализации нагрузки tableViewCell.

В iOS 7 есть куча ошибок ... но я использую минимум 8.4.

Значит, кто-нибудь знает, что эта ошибка помогает? Спасибо

+0

почему вы должны использовать механизм автоматического обновления? – Carlo

+0

это концепция приложения ... Альтернативным было бы обновление вручную. С обновлением вручную проблема такая же: – kuzdu

+0

, но вы ставите это как код или в раскадровку? – Carlo

ответ

0

Попробуйте использовать метод атрибута настроить строку в метод, подобный следующему:

let myAttribute = [ NSForegroundColorAttributeName: UIColor.blueColor() ] 
let myAttrString = NSAttributedString(string: stringWithLinks, attributes: myAttribute) 

Таким образом, вы имеете настроенную строку. Хорошая работа

0

@Carlo Этот пример не работает для меня.

Важно: В InterfaceBuilder TextView должен быть выбор = истина/на

То, что сработало для меня мой собственный парсер, чтобы получить все ссылки/письма (все, что вы хотите):

func searchForLinksAndMailsInString(remark: String) -> NSMutableAttributedString { 


    let attributedString = NSMutableAttributedString(string: remark) 

    //set default color for non links and mails 
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSRange(location:0,length:remark.characters.count)) 

    //search for valid websites 
    let matchesForWebsite = Model.sharedInstance().parseForRegexInText(RegexFilter.regexFindAllValidWebsites, text: remark) 

    //make links clickable 
    for match in matchesForWebsite { 
     attributedString.setAsLink(match, linkURL: match) 
    } 

    //same as websites just for mails 
    let matchesForMails = Model.sharedInstance().parseForRegexInText(RegexFilter.regexFindAllValidMails, text: remark) 

    for match in matchesForMails { 
     attributedString.setAsLMail(match, mail: match) 
    } 


    return attributedString 

} 

Extension, чтобы сделать результаты интерактивного

extension NSMutableAttributedString { 
//not my work see [here][1] 
public func setAsLink(textToFind:String, linkURL:String) -> Bool { 

    let foundRange = self.mutableString.rangeOfString(textToFind) 
    if foundRange.location != NSNotFound { 
     if let linkURLToURL = NSURL(string: linkURL) { 
      self.addAttribute(NSLinkAttributeName, value: linkURLToURL, range: foundRange) 
     } 
     return true 
    } 
    return false 
} 


public func setAsLMail(textToFind:String, mail:String) -> Bool { 

    let foundRange = self.mutableString.rangeOfString(textToFind) 
    if foundRange.location != NSNotFound { 
     if let mailToURL = NSURL(string: "mailto:\(mail)") { 
      self.addAttribute(NSLinkAttributeName, value: mailToURL, range: foundRange) 
     } 
     return true 
    } 
    return false 
} 
} 

Как звонить:

let attributedString = searchForLinksAndMailsInString(remark) subtitleTextView.attributedText = attributedString

Мои regexs (они работают, нет никакой гарантии, элегантности):

class RegexFilter { 
    static let regexFindAllValidMails = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}" 
    static let regexFindAllValidWebsites = "(((http(s)?://)(www.)?)|(www.))([a-z][a-z0-9]*).([a-z]{2,3})" 
} 
+0

нормально, я рад за ваше решение. Отличная работа – Carlo