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

Posted

技术标签:

【中文标题】iOS - 无法访问 UITableViewCell 类中的 UITextView 委托【英文标题】:iOS - Cannot access UITextView delegate inside a UITableViewCell class 【发布时间】:2017-02-12 23:30:17 【问题描述】:

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

我正在尝试访问 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

感谢孩子们的回答。

【问题讨论】:

我已经尝试过方便的 init() 并且它不起作用 我不认为 super.init() 是指定的初始化程序。尝试其他之一。我认为可能有一个 super.init(nib:, bundle:) 或类似的东西。 如果我尝试 super.init(style: UITableViewCellStyle.default, reuseIdentifier: "mainCell") 初始化程序,则会显示所需的 init() 致命错误。 在表格视图单元格中访问对象委托属性应该不难,我错过了一些我看不到的东西:/ 【参考方案1】:
override func awakeFromNib() 
    super.awakeFromNib()
    textView.delegate = self

干得漂亮

【讨论】:

欢迎来到 ***!虽然答案总是很受欢迎,但请提供一些围绕您的答案的背景信息,并查看help article 以获取有关如何撰写出色答案的信息。 奇怪的是,这行得通,但我发誓我以前试过这个,但编译时出错:/ 还是谢谢你 m8【参考方案2】:

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

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

【讨论】:

以上是关于iOS - 无法访问 UITableViewCell 类中的 UITextView 委托的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 ios 捆绑资源

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

无法在 ios 9 中为 AVCaptureDevice 访问相机。

无法使用 Xcode 从代码访问文件 - ios

iOS SDK 似乎无法在 iOS 6 中处理撤销的访问令牌

离子 ios 应用程序无法访问互联网