[英]NSAttributedStringKey.foregroundColor not working
I'm using ZSWTappableLabel
and ZSWTaggedString
to show links inside a label. 我正在使用ZSWTappableLabel
和ZSWTaggedString
来显示标签内的链接。
import ZSWTappableLabel
import ZSWTaggedString
The pod versions are: pod版本是:
pod 'ZSWTappableLabel', '~> 2.0'
pod 'ZSWTaggedString/Swift', '~> 4.0'
The links used to appear in white (same color as the label) by default earlier, but after some update that happened recently (possibly a pod update or xcode version, I'm not able to pinpoint exactly what), the links have started to appear in blue. 默认情况下,链接过去常常以白色显示(与标签颜色相同),但在最近发生的一些更新(可能是pod更新或xcode版本,我无法确切指出是什么)之后,链接已经开始以蓝色显示。 Setting NSAttributedStringKey.foregroundColor
to white doesn't seem to affect anything. 将NSAttributedStringKey.foregroundColor
设置为白色似乎不会影响任何内容。 NSAttributedStringKey.backgroundColor
does affect it, but for some reason the foregroundColor
doesn't seem to have any effect. NSAttributedStringKey.backgroundColor
会影响它,但由于某种原因, foregroundColor
似乎没有任何效果。
How can I set the links in white color? 如何设置白色链接?
func setTermsAndPrivacyLinkLabel(){
termsAndPrivacyLabel.tapDelegate = self
let options = ZSWTaggedStringOptions()
options["link"] = .dynamic({ tagName, tagAttributes, stringAttributes in
guard let type = tagAttributes["type"] as? String else {
return [NSAttributedStringKey : Any]()
}
var foundURL: NSURL?
switch type {
case "privacy":
foundURL = NSURL(string: "\(privacyUrl)")!
case "tos":
foundURL = NSURL(string: "\(termsUrl)")!
default:
break
}
guard let URL = foundURL else {
return [NSAttributedStringKey : Any]()
}
return [
.tappableRegion: true,
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 13.0),
.link: foundURL
]
})
let string = NSLocalizedString("By logging in, you agree to our <link type='tos'>terms</link> and <link type='privacy'>privacy</link>.", comment: "")
termsAndPrivacyLabel.attributedText = try? ZSWTaggedString(string: string).attributedString(with: options)
}
func tappableLabel(_ tappableLabel: ZSWTappableLabel, tappedAt idx: Int, withAttributes attributes: [NSAttributedStringKey : Any] = [:]) {
guard let url = attributes[.link] as? URL else {
return
}
UIApplication.shared.openURL(url)
}
This works: 这有效:
extension HomeViewController: ZSWTappableLabelTapDelegate {
static let urlAttributeName = NSAttributedStringKey(rawValue: "URL")
func setLinks(){
termsPrivacyLabel.tapDelegate = self
enum LinkType: String {
case privacy = "privacy"
case terms = "terms"
var URL: Foundation.URL {
switch self {
case .privacy:
return Foundation.URL(string: "myprivacyurl")!
case .terms:
return Foundation.URL(string: "mytermsurl")!
}
}
}
let options = ZSWTaggedStringOptions()
options["link"] = .dynamic({ tagName, tagAttributes, stringAttributes in
guard let typeString = tagAttributes["type"] as? String,
let type = LinkType(rawValue: typeString) else {
return [NSAttributedStringKey: AnyObject]()
}
return [
.tappableRegion: true,
.tappableHighlightedForegroundColor: UIColor.white,
.foregroundColor: UIColor.lightGray,
.underlineStyle: NSUnderlineStyle.styleNone.rawValue,
.font: UIFont.boldSystemFont(ofSize: 13.0),
HomeViewController.urlAttributeName: type.URL
]
})
let string = NSLocalizedString("By signing in, you agree to the <link type='terms'>terms</link> and <link type='privacy'>privacy</link>.", comment: "")
termsPrivacyLabel.attributedText = try? ZSWTaggedString(string: string).attributedString(with: options)
}
func tappableLabel(_ tappableLabel: ZSWTappableLabel, tappedAt idx: Int, withAttributes attributes: [NSAttributedStringKey : Any] = [:]) {
guard let URL = attributes[HomeViewController.urlAttributeName] as? URL else {
return
}
if #available(iOS 9, *) {
show(SFSafariViewController(url: URL), sender: self)
} else {
UIApplication.shared.openURL(URL)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.