代码之家  ›  专栏  ›  技术社区  ›  Prabhu

NSAttributeStringKey.foregroundColor不工作

  •  5
  • Prabhu  · 技术社区  · 6 年前

    我在用 ZSWTappableLabel ZSWTaggedString 显示标签内的链接。

    import ZSWTappableLabel
    import ZSWTaggedString
    

    pod版本包括:

      pod 'ZSWTappableLabel', '~> 2.0'
      pod 'ZSWTaggedString/Swift', '~> 4.0'
    

    NSAttributedStringKey.foregroundColor 对白人似乎没有任何影响。 NSAttributedStringKey.backgroundColor 但由于某种原因 foregroundColor 似乎没有任何效果。

    如何设置白色的链接?

    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)
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Prabhu    6 年前

    这样做有效:

       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)
                }
            }
    
    推荐文章