在TableViewCell中使用链接邮件突出显示的Textview会将tintColor更改为秒

时间:2016-09-02 07:50:23

标签: ios swift uitableview textview

我的tableViewCell中有一个textView。在Interfacebuilder中,我为textview设置了链接,邮件和地址检测。因此,所有链接,邮件和地址都会突出显示。 textview也是可选择的。

我正在使用autorefresh,因此tableViewCell的内容将重新加载所有30秒。每当发生这种情况时,突出显示消失为< 1秒钟,突出显示回来。

有时这会发生在tableViewCell的初始化加载中。

在iOS 7中似乎有一堆错误......但我使用的最小值为8.4。

那么有人知道这个bug有什么帮助吗?谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用属性方法以类似于此方法的方式自定义字符串:

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

所以你有自定义的字符串。 干得好

答案 1 :(得分:0)

@Carlo 这个例子对我不起作用。

重要:在Interfacebuilder中,textview必须是可选的= true / on

对我来说有用的是我自己的解析器来获取所有链接/邮件(无论你想要什么):

 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 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

我的正则表达(它们起作用,不保证优雅):

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