【发布时间】:2020-07-26 13:52:01
【问题描述】:
我有一个TableViewCell,其中有一个可点击的textView:
let linkTextView: UITextView = {
let v = UITextView()
v.backgroundColor = .clear
v.textAlignment = .left
v.isScrollEnabled = false
let padding = v.textContainer.lineFragmentPadding
v.textContainerInset = UIEdgeInsets(top: 0, left: -padding, bottom: 0, right: -padding)
v.tintColor = .darkCustom
v.isEditable = false
v.isSelectable = true
v.translatesAutoresizingMaskIntoConstraints = false
return v
}()
let interactableText = NSMutableAttributedString(string: "Link öffnen")
在Cell我也有这两个函数来设置它的样式并使它成为clickable:
func setupTextView(){
interactableText.addAttributes([.underlineStyle: NSUnderlineStyle.single.rawValue,
NSAttributedString.Key.font: UIFont(name: "AvenirNext-Medium", size: 15)!,
NSAttributedString.Key.underlineColor: UIColor.darkCustom],
range: NSRange(location: 0, length: interactableText.length))
interactableText.addAttribute(NSAttributedString.Key.link,
value: "https://www.google.de/?hl=de",
range: NSRange(location: 0, length: interactableText.length))
}
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
self.linkTappedCallback!(URL)
return false
}
此设置有效。然而,这不是我真正想要的。我希望能够为每个cell 更改link 的value。我在cellForRowAt这样尝试过:
print(currentWish.link)
cell.interactableText.addAttribute(NSAttributedString.Key.link,
value: currentWish.link,
range: NSRange(location: 0, length: cell.interactableText.length))
但是当它像这样并且不要在Cell 中设置link 时,textView 不再可点击。我在这里错过了什么?
【问题讨论】:
-
我的回答可能会有所帮助:stackoverflow.com/questions/39238366/…
-
@elarcoiris 正是我所需要的!谢谢
-
太棒了!非常感谢对该答案的支持:)
标签: ios swift uitextview nsattributedstring