@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})"
}
почему вы должны использовать механизм автоматического обновления? – Carlo
это концепция приложения ... Альтернативным было бы обновление вручную. С обновлением вручную проблема такая же: – kuzdu
, но вы ставите это как код или в раскадровку? – Carlo