代码之家  ›  专栏  ›  技术社区  ›  Adam

TableView中的Swift ios NSAttributedString链接不起作用

  •  0
  • Adam  · 技术社区  · 6 年前
    extension String {    
        func accentTagAndLink(tags:Array<String>) -> NSMutableAttributedString {
    
            let attributedString:NSMutableAttributedString = NSMutableAttributedString(string: self)
            var NSContents = self as NSString
    
            for tagChild in tags {
                if !tagChild.starts(with: "<") {
                    let range = NSContents.range(of: "#" + tagChild)
                    var changeString = ""
    
                    for _ in 0..<tagChild.count {
                        changeString += "$"
                    }
    
                    NSContents = NSContents.replacingOccurrences(of: tagChild, with: changeString, options: .literal, range: range) as NSString
                    attributedString.addAttribute(.link, value: tagChild, range: range)
                    attributedString.addAttribute(.foregroundColor, value: UIColor(red: 79/255, green: 205/255, blue: 255/255, alpha: 1), range: range)
                }
            }
    
            return attributedString
        }
    }
    

    表格视图单元格

    class PostCell: TableViewCell {
        @IBOutlet weak var postContent: UITextView!
    }
    

    在主视图控制器中

    class PostViewController: UIViewController, UITableViewDataSource, UITableViewDelegate,UITextViewDelegate {
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = postTableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! PostCell
            let post = postList[indexPath.row]
            let tags = (post["Content"] as! String).FindTagAtString()
            cell.postContent.delegate = self
            cell.postContent.isSelectable = true
            cell.postContent.isEditable = false
            cell.postContent.dataDetectorTypes = UIDataDetectorTypes.link
            cell.postContent.attributedText = (post["Content"] as! String).accentTagAndLink(tags: tags)
        }
    
        func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
            print("link")
            return true
        }
    
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            print("cell")
        }
    }
    

    NSLink UITextView 在里面 TableViewCell

    我要点击链接事件返回“链接”

    表格视图单元格 选项卡事件

    总是返回“cell”

    TTTAttributedLabel 是有效的但会破坏我的代码

    所以让它成为自拍链接

    帮助

    1 回复  |  直到 6 年前
        1
  •  1
  •   potato    6 年前

    重要的

    文本视图中的链接只有在文本视图可选择但不可编辑时才是交互式的。也就是说,如果UITextView的值,那么selectable属性是YES,而isEditable属性是NO。

    我想你忘了设置 isEditable 错了。
    Apple Doc