我的tableViewCell中有一个textView。在Interfacebuilder中,我为textview设置了链接,邮件和地址检测。因此,所有链接,邮件和地址都会突出显示。 textview也是可选择的。
我正在使用autorefresh,因此tableViewCell的内容将重新加载所有30秒。每当发生这种情况时,突出显示消失为< 1秒钟,突出显示回来。
有时这会发生在tableViewCell的初始化加载中。
在iOS 7中似乎有一堆错误......但我使用的最小值为8.4。
那么有人知道这个bug有什么帮助吗?谢谢
答案 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})"
}