iOS — невозможно получить доступ к делегату UITextView внутри класса UITableViewCell

Я обнаружил некоторые проблемы при попытке доступа к методам 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»

Любой совет о том, как обойти это?

заранее спасибо

ПОСЛЕДНИЕ РЕДАКТИРОВАНИЯ Я сделал то, что действительно хотел. Вместо использования UITextFieldDelegate внутри класса UITableViewCell я добавил UITextFieldDelegate в ViewController, который использует саму ячейку, и только что сделал в конфигурации ячейки: cell.textView.degelate = Self , затем я реализовал функцию делегата func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {}

Спасибо за ответы мальчики.


person Ivan Cantarino    schedule 12.02.2017    source источник
comment
Я уже пробовал с удобством init(), и это не сработало   -  person Ivan Cantarino    schedule 13.02.2017
comment
Я не думаю, что super.init() является назначенным инициализатором. Попробуйте один из других. Я думаю, что может быть super.init(nib:, bundle:) или что-то подобное.   -  person Erik    schedule 13.02.2017
comment
Если я попробую инициализатор super.init(style: UITableViewCellStyle.default, reuseIdentifier: "mainCell"), будет показана требуемая фатальная ошибка init().   -  person Ivan Cantarino    schedule 13.02.2017
comment
Это не должно быть сложно получить доступ к свойствам делегата объекта внутри ячеек табличного представления, мне не хватает чего-то, чего я не вижу:/   -  person Ivan Cantarino    schedule 13.02.2017


Ответы (2)


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

Хорошая работа

person jupiter1992    schedule 13.02.2017
comment
Добро пожаловать в StackOverflow! Хотя ответы всегда приветствуются, предоставьте некоторый контекст, связанный с вашим ответом, и см. статью справки для получения информации о том, как пишите отличные ответы. - person Obsidian Age; 13.02.2017
comment
Как ни странно, это сработало, но я клянусь, что пробовал это раньше и получил ошибки компиляции :/ В любом случае спасибо m8 - person Ivan Cantarino; 13.02.2017

Строка, которая вызывает у вас затруднения, это не textView.delegate = self, а скорее super.init(). Вам нужно будет правильно вызвать это с помощью nibName и bundle.

init() {
    super.init(nibName: PutTheStringHere, bundle: PutTheBundleHere)
    textView.delegate = self
}
person Faris Sbahi    schedule 13.02.2017