在 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

现在为了使它可编辑和可点击,需要从情节提要中进行设置,例如: 只需检查EditableSelectable 选项即可。

【讨论】:

以上是关于在 swift 中使 URL 链接属性和可点击以及可编辑的 Textview的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift iOS 中使 web 视图不可点击

在 Swift 中使 NavigationBar 子视图可点击

如何在swift中使基类属性通用,以便可以与多种模型类型一起使用?

无法在 UITextView 中使 URL 可点击

有没有办法在 Angular 中使字段可拖动和可编辑?

如何在 QTextEdit 中使链接可点击?