У меня есть подкласс UITableViewCell под названием CustomTableCell, который объявлен в быстрой версии 4.1. файл.
На мой взгляд, контроллер с UITableView у меня в cellForRowAt:
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") as! CustomTableCell
cell.delegate = self
Я получаю следующую ошибку:
Value of type 'CustomTableCell' has no member delegate.
Я объявил UITableViewDelegate вверху.
cell.delegate! = UITableViewDelegate. Ячейка должна иметь собственный протокол делегата.
почему негатив и близость к программированию не по теме? просто любопытно





UITableViewDelegate не требует cell.delegate = self.
Если у вас CustomTableCell есть ваш Custom Delegate, вам нужно только назначить его. Так что, если у вас нет муравья Custom Delegate для вашего CustomTableCell, удалите эту строку.
Для методов делегата tableView вы должны добавить это в viewDidLoad ():
yourTableView.delegate = self
yourTableView.dataSource = self
Или подключите только с помощью StoryBorad.
Ответ на вопрос: Как создать делегат ячейки в классе CustomTableCell? Просто любопытно
CustomTableCell.swift:
// Custom protocol
protocol CustomCellDelegate: NSObjectProtocol {
// Protocol method
func someFunctionToPassSomeValue(name: String)
}
class CustomTableCell: UITableVieCell {
weak var delegate: CustomCellDelegate?
// Your class implementations and outlets..
//Call your protocol method in some action, for example in button action
@IBAction func buttonAction(sender: UIButton) {
delegate?.someFunctionToPassSomeValue(name: "anyStringValue")
}
}
Затем в классе ViewController вам нужно назначить экземпляр пользовательской переменной делегата.
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") as! CustomTableCell
cell.delegate = self
И реализуем метод протокола:
extension ViewController: CustomCellDelegate {
func someFunctionToPassSomeValue(name: String) {
print("Delegate is working. Value : \(name)")
}
}
Как создать делегата ячейки в классе CustomTableCell? Просто любопытно
@cdub Обновил мой ответ, чтобы показать пример настраиваемого делегата.
не забудьте использовать «делегат?. ****» (если вы не уверены, что делегат не равен нулю) или «делегат!. ****» (если вы уверены, что это не ноль), если это необязательно .
@Sedo хороший момент, я забыл добавить его, потому что я пишу его здесь напрямую. Обновлено.
@SharadChauhan Я подумал. И "func" перед buttonAction.
@Sedo Я написал это для понимания. Чтобы сделать его идеальным, он должен иметь @ IBAction также перед func.
У вашей пользовательской ячейки есть свойство, называемое делегатом? Вероятно, отсутствует его декларация.