iOS - 无法在UITableViewCell类中访问UITextView委托

时间:2017-02-12 23:30:17

标签: ios uitableview swift3 uitextviewdelegate

在尝试访问实例化UITableViewDelegate类中的UITableViewCell方法时,我发现了一些问题。

我正试图访问 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {} 并且函数不会触发,我猜这是因为我在尝试设置委托时遇到了一些问题。

代码如下:

import UIKit
class TableViewCell: UITableViewCell, UITextViewDelegate {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var textView: UITextView!
    @IBOutlet var postImageView: UIImageView!


    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
        print("link tapped")
        return true
    }

    init() {
        super.init()
        textView.delegate = self
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}

super.init()行显示此错误

  

TableViewCell.swift - “必须调用超类的指定初始值设定项”'UITableViewCell'

有关如何超越此问题的任何提示?

提前致谢

最终编辑 我做了我真正想做的事。 我没有在UITableViewCell类中使用UITextFieldDelegate,而是将UITextFieldDelegate添加到使用单元格本身的ViewController,并且在单元格配置上执行了以下操作: cell.textView.degelate = Self,然后我实现了委托函数 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {}

感谢您回答男生。

2 个答案:

答案 0 :(得分:4)

override func awakeFromNib() {
    super.awakeFromNib()
    textView.delegate = self
}

干得好

答案 1 :(得分:1)

给您带来麻烦的不是textView.delegate = self,而是super.init()。您需要使用nibName和bundle正确调用它。

init() {
    super.init(nibName: PutTheStringHere, bundle: PutTheBundleHere)
    textView.delegate = self
}