带有NSMutableAttributedString的UITextView与链接SwiftUI。

问题描述 投票:1回答:1

我有一个使用 "ShouldInteractWith "方法的自定义UITextView。

class StudyText: UITextView,  UITextViewDelegate {
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
        print(URL)

        return false
    }
}

struct ClickableText: UIViewRepresentable {
    @Binding var text: NSMutableAttributedString

    func makeUIView(context: Context) -> StudyText {
        let view = StudyText()

        view.dataDetectorTypes = .all
        view.isEditable        = false
        view.isSelectable      = true
        view.delegate          = view
        view.isUserInteractionEnabled = true

        return view
    }

    func updateUIView(_ uiView: StudyText, context: Context) {
        uiView.attributedText = text

    }
}

我有这个扩展来设置一个链接到属性文本。

extension NSMutableAttributedString {

    func apply(link: String, subString: String)  {
        if let range = self.string.range(of: subString) {
            self.apply(link: link, onRange: NSRange(range, in: self.string))
        }
    }
    private func apply(link: String, onRange: NSRange) {
        self.addAttributes([NSAttributedString.Key.link: link], range: onRange)
    }

}

我还创建了这个布局。

struct contentView: View {
    @State text: NSMutableAttributedString = NSMutableAttributedString(string: "")

    var body: some View {
        VStack {
             ClickableText(text: self.$text)
        }
        .onAppear{

             let myText = "Click Me!"

             let attributedString = NSMutableAttributedString(string: myText)
             attributedString.apply(link: "Soeme random link", subString: myText)

             self.text = attributedString

        }
    }
}

当我点击文本视图时,它并没有打印任何东西到控制台,有时还会崩溃.我如何解决这个问题?

ios swift uitextfield swiftui uiviewrepresentable
1个回答
1
投票

它必须提供有效的URL,如

 let attributedString = NSMutableAttributedString(string: myText)
 attributedString.apply(link: "https://www.google.com", subString: myText)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.