CDMarkdownKit icon indicating copy to clipboard operation
CDMarkdownKit copied to clipboard

UITextViewDelegate not called textView(_ textView: UITextView, shouldInteractWith....

Open Disconnecter opened this issue 2 years ago • 1 comments

What did you do?

final class MarkDownItemView: StackItemView<MarkDownItemView.Style> {
   override var arrangedViews: [UIView] {
       [markdownView]
   }

   private lazy var markdownView: CDMarkdownTextView = { [unowned self] in
       let textContainer = NSTextContainer(size: .zero)
       let layoutManager = CDMarkdownLayoutManager()
       layoutManager.addTextContainer(textContainer)
       let codeTextView = CDMarkdownTextView(frame: .zero,
                                             textContainer: textContainer,
                                             layoutManager: layoutManager)
       codeTextView.backgroundColor = .clear
       codeTextView.isScrollEnabled = false
       codeTextView.isEditable = false
       codeTextView.isSelectable = true
       codeTextView.delegate = self
       return codeTextView
   }()

   private var model: MarkdownTitleCellModelType?

   override func applyStyle(_ style: Style) {
       setContentInsets(style.contentInsets)
   }
}

extension MarkDownItemView {
   struct Style {
       let headerFont: UIFont
       let font: UIFont
       let boldFont: UIFont
       let italicFont: UIFont
       let linkColor: UIColor
       let fontColor: UIColor
       var contentInsets: UIEdgeInsets = .single(inset: 16)

       static let `default`: Style = .init(
           headerFont: Asset.Font.withStyle(.medium, size: .caption),
           font: Asset.Font.withStyle(.regular, size: .caption),
           boldFont: Asset.Font.withStyle(.medium, size: .caption),
           italicFont: Asset.Font.withStyle(.light, size: .body),
           linkColor: ColorPalette.Purple.darkPrimary.color,
           fontColor: ColorPalette.Black.primary.color
       )
   }

   func setup(model: MarkdownTitleCellModelType) {
       guard let style = styles[model.itemViewState] else {
           return
       }

       self.model = model
       let paragraphStyle = NSMutableParagraphStyle()
       paragraphStyle.paragraphSpacing = 3
       paragraphStyle.paragraphSpacingBefore = 12
       paragraphStyle.lineSpacing = 1.38

       let markdownParser = CDMarkdownParser(
           font: style.font,
           boldFont: style.boldFont,
           italicFont: style.italicFont,
           fontColor: style.fontColor,
           paragraphStyle: paragraphStyle
       )
       markdownParser.header.font = style.headerFont
       markdownParser.header.fontIncrease = 1

       let paragraphStyleList = NSMutableParagraphStyle()
       paragraphStyleList.paragraphSpacing = 3
       paragraphStyleList.paragraphSpacingBefore = 0
       paragraphStyleList.lineSpacing = 1.38
       markdownParser.list.paragraphStyle = paragraphStyleList

       markdownView.linkTextAttributes = [.foregroundColor: style.linkColor]
       markdownView.attributedText = markdownParser.parse(model.title)
       restyle(state: model.itemViewState)
   }
}

extension MarkDownItemView: UITextViewDelegate {
   func textView(_ textView: UITextView, shouldInteractWith markdownURL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
       if ValidationRule(ruleType: .email).validate(against: markdownURL.absoluteString) {
           model?.emailHandler(markdownURL.absoluteString)
       } else if UIApplication.shared.canOpenURL(markdownURL) {
           UIApplication.shared.open(markdownURL, options: [:])
       }
       return false
   }
}


What did you expect to happen?

call delegate method func textView(_ textView: UITextView, shouldInteractWith markdownURL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {

What happened instead?

nothing

CDMarkdownKit Environment

CDMarkdownKit version: 2.2.0 or 2.3.0 same behaviour Xcode version: 14.1 (14B47b) Swift version: 5.0 Platform(s) running CDMarkdownKit: ios 16 macOS version running Xcode: 13.0 (22A380)

Disconnecter avatar Dec 02 '22 16:12 Disconnecter

Thank you for posting this @Disconnecter. I've seen an increase in issues reported related to the TextField and Label components. I will try and get to fixing them soon.

chrisdhaan avatar Dec 04 '22 09:12 chrisdhaan