gpt4 book ai didi

ios - ASTextNode 中没有 LinkAttribute 的 TouchUpInside

转载 作者:行者123 更新时间:2023-11-29 05:48:58 26 4
gpt4 key购买 nike

我有一个文本 (ASTextNode)

let contentNode = ASTextNode()

contentNode.maximumNumberOfLines = 7
contentNode.truncationMode = .byTruncatingTail
contentNode.isUserInteractionEnabled = true
contentNode.delegate = self

并且在contentNode中有链接

我为 contentNode 设置 touchUpInSide

contentNode.addTarget(self, action: #selector(contentNodeTapped), forControlEvents: .touchUpInside)

@objc func contentNodeTapped() {

if contentNode.maximumNumberOfLines == 7 {
contentNode.maximumNumberOfLines = 0
} else {
contentNode.maximumNumberOfLines = 7
}
UIView.animate(withDuration: 0.2, delay: 0, options: [UIView.AnimationOptions.layoutSubviews], animations: {
self.contentNode.setNeedsLayout()
self.contentNode.layoutIfNeeded()
}, completion: nil)

}

func textNode(_ textNode: ASTextNode!, tappedLinkAttribute attribute: String!, value: Any!, at point: CGPoint, textRange: NSRange) {
guard let url = value as? URL else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

当我点击 contentNode 时,我想更改 MaximumNumberOfLines 以查看所有文本,但这并不顺利。我只是尝试了 UIView.animate 但没有效果。

当我点击 contentNode 中的链接时,它不会同时调用 2 个函数 contentNodeTappedtappedLinkAttribute

如何在点击链接时仅调用tappedLinkAttribute

Text after tapped

点击后的文本

Text after tapped

最佳答案

我相信你不能这样做,而是需要使用 ASEditableTextNode 并使用 ASEditableTextNodeDelegateurl 点击时捕获事件

你可以打电话

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {

// your action here

return true
}

您需要确保您的 ASEditableTextNode 样式看起来像您当前的 ASTextNode

关于ios - ASTextNode 中没有 LinkAttribute 的 TouchUpInside,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55862981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com