NSAttributedStringKey.foregroundColor не работает - PullRequest
0 голосов
/ 09 октября 2018

Я использую ZSWTappableLabel и ZSWTaggedString, чтобы показать ссылки внутри ярлыка.

import ZSWTappableLabel
import ZSWTaggedString

Версии модуля:

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

Ссылки раньше отображались белым (тот же цвет, что и на этикетке) по умолчанию ранее, но после некоторого обновления, которое произошло недавно (возможно,обновление pod или версия xcode, я не могу точно определить, что именно), ссылки начали появляться синим цветом.Установка 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 Ответ

0 голосов
/ 10 ноября 2018

Это работает:

   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)
            }
        }
...