我在注册屏幕上复选框旁边的位置有这个应用程序,它应该是一句话:我同意公司服务条款。服务条款部分应该是可单击的,以便用户能够进入ToS屏幕(尽管用户永远不会这样做)。

问题是,此应用程序将是多语言的,因此所有文本都应本地化。这就是为什么简单的String + Button解决方案不起作用的原因:

ㅁ我同意公司服务条款

용약관에스이이동의합니다

在英语中,该可单击部分(粗体)在句子的末尾,而在韩语中,这是在句首。用其他语言,可能在中间。

问题:如何解决这个问题?有一些优雅的方法吗?两个情节提要?

最佳答案

这是我的方法:

let attributes: [NSMutableAttributedString.Key : Any] = [
                .font: UIFont.systemFont(ofSize: 15),
                .foregroundColor: UIColor.init(red: 240/255, green: 230/255, blue: 239/255, alpha: 1)
            ]

let attributedString = NSMutableAttributedString(string: "tos_string".localized, attributes: attributes)
let rangeTOS = (attributedString.string as NSString).range(of: "tos_string_TOS".localized)
let rangePP = (attributedString.string as NSString).range(of: "tos_string_PP".localized)

attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.example.com/resources/pages/terms.html", range: rangeTOS)
attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.example.com/resources/pages/privacy.html", range: rangePP)


let linkAttributes: [NSAttributedString.Key : Any] = [
                NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.init(red: 240/255, green: 166/255, blue: 202/255, alpha: 1),
                ]

textView.linkTextAttributes = linkAttributes
textView.attributedText = attributedString
textView.delegate = self


其中tos_string, tos_string_TOStos_string_PP是:

"tos_string" = "I agree to the Company Terms of Service and Privacy Policy";
"tos_string_TOS" = "Terms of Service";
"tos_string_PP" = "Privacy Policy";


Localizable.strings

谢谢@Larme的指示!

10-06 13:46