在 swift 中使 URL 链接属性和可点击以及可编辑的 Textview
Posted
技术标签:
【中文标题】在 swift 中使 URL 链接属性和可点击以及可编辑的 Textview【英文标题】:Making URL links attributed and clickable along with editable Textview in swift 【发布时间】:2021-08-04 07:06:37 【问题描述】:我想让 url 链接在 TextView 中可点击,并让该文本像 iPhone 中的 Notes 应用程序一样可编辑。
这是我的尝试:
txtVw.dataDetectorTypes = UIDataDetectorTypes.link
txtVw.isSelectable = true
txtVw.isEditable = false. // this is set to false to make link text tappable
txtVw.linkTextAttributes = [.foregroundColor: UIColor.blue, .underlineStyle: NSUnderlineStyle.single.rawValue]
txtVw.isUserInteractionEnabled = true
txtVw.delegate = self
let descTap = UITapGestureRecognizer(target: self, action: #selector(textViewTapped))
descTap.numberOfTapsRequired = 1
txtVw.addGestureRecognizer(descTap)
@objc func textViewTapped(_: UITapGestureRecognizer)
txtVw.dataDetectorTypes = []
txtVw.isEditable = true
txtVw.becomeFirstResponder()
这里的问题是,如果我将 isEditable 属性设置为 true,则链接未格式化,如果不可编辑,则剩余文本。我想实现与 iPhone 笔记应用程序相同的功能。 有没有人遇到过这种情况?任何帮助将不胜感激。
【问题讨论】:
使用NSAttributedString.Key.link
。
【参考方案1】:
首先你需要有 textView 而不是 Textfield。 它们适用于以下编程方式来设置颜色或样式。
let attributedString = NSMutableAttributedString(string: "I understand and agree to the Terms of Service.", attributes: [
.font: UIFont.systemFont(ofSize: 12.0, weight: .regular),
.foregroundColor: UIColor.errorColor,
.kern: 0.0
])
attributedString.addAttribute(.link, value: "https://policies.google.com/privacy?hl=en-US", range: NSRange(location: 30, length: 17))
self.termOfServiceTextView.linkTextAttributes = [NSAttributedString.Key.foregroundColor.rawValue: UIColor.errorColor]
attributedString.addAttribute(.underlineStyle, value: 1, range: NSRange(location: 30, length: 17))
self.termOfServiceTextView.attributedText = attributedString
现在为了使它可编辑和可点击,需要从情节提要中进行设置,例如:
只需检查Editable
、Selectable
选项即可。
【讨论】:
以上是关于在 swift 中使 URL 链接属性和可点击以及可编辑的 Textview的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使 NavigationBar 子视图可点击