Определите свой контроллер представления. назначить делегата внутри

я есть социальная сеть в форме UItableView, который имеет ячейку. Теперь у каждой ячейки есть изображение, которое анимируется при срабатывании четности. Теперь это событие в форме строки будет запускаться в каждой ячейке. параметры для события определены в другом классе (типа NSObject).

Моя проблема: я создал метод делегата протокола в табличном представлении, который будет вызываться всякий раз, когда событие вызывается для каждой ячейки. Затем я определяю эту функцию в классе UITableViewCell, так как мое изображение будет анимироваться. Все работает хорошо, но я не могу понять, как назначить делегат класса TableView классу ячейки. Я имею в виду, как я могу использоватьUITableView.delegate = self в классе cellView. Я пытался использовать статическую переменную, но она не работает.

Я уже некоторое время разыгрываю протоколы, но действительно не могу найти решение этой проблемы.

Я надеюсь, что я ясно. Если нет, я приведу пример в комментариях. Извините, это конфиденциальный проект, и я не могу раскрыть все детали.

Ответы на вопрос(2)

Решение Вопроса

class ViewController: UIViewController, YourCustomTableDelegate {

@IBOutlet weak var tableView: YourCustomTableView!  

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.customTableDelegate = self
    }


    // table delegate method
    func shouldAnimateCell(at indexPath: IndexPath) {
       if let cell = tableView.cellForRow(at: indexPath) {
           cell.animate(...)
       }    
    }
}
 Aakash Dave02 нояб. 2017 г., 17:42
Эй, ТБХ, это не совсем решило мою проблему. Но я нашел решение, почти похожее на это, взяв подсказки из вашего ответа. То, что я на самом деле делал, вызывает функции Mutliple вscrollViewDidEndDragging, которые сами имели другие функции, на которые мне наконец-то потребовался делегат. Я просто продолжал передавать ячейки пользовательских классов UITableView в функцию. Это сработало хорошо. У меня была похожая логика, я просто упустил это из виду. Приветствую приятель за оперативную помощь.

вы пытаетесь заставить каждую из ваших ячеек соответствовать протоколу, который принадлежит их UITableView? Если это так, то это не может быть сделано. Шаблон проектирования делегирования является отношением один-к-одному, то есть только один из ваших UITableViewCells сможет соответствовать делегату UITableView.

Делегирование - это простой и мощный шаблон, в котором один объект в программе действует от имени или в координации с другим объектом. Делегирующий объект сохраняет ссылку на другой объект - делегат - и в соответствующее время отправляет ему сообщение. Сообщение информирует делегата о событии, которое делегируемый объект собирается обработать или только что обработал. Делегат может ответить на сообщение, обновив его внешний вид или состояние или другие объекты в приложении, и в некоторых случаях он может возвращать значение, которое влияет на обработку предстоящего события. Основная ценность делегирования заключается в том, что он позволяет легко настраивать поведение нескольких объектов в одном центральном объекте.

Цитата изApple Docs

Я бы предложил, чтобы ваш UITableViewCell вызывал блок (Objective-C) или замыкание (Swift) всякий раз, когда указанное событие запускается для достижения того, что вы ищете. Установите это закрытие в вашей функции tableView: cellForRowAtIndexPath.

ПРИМЕР

TableViewController

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
  {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCellID", for: indexPath) as! MyTableViewCell
    cell.eventClosure = {
     //Do something once the event has been triggered.
    }
    return cell
  }

TableViewCell

func eventTriggered()
{
  //Call the closure now we have a triggered event.
  eventClosure()
}
 Rhuari Glen02 нояб. 2017 г., 17:35
@AakashDave Нет проблем! Рад, что вы нашли решение
 Aakash Dave02 нояб. 2017 г., 19:06
я сталкиваюсь с подобной проблемой передачи данных. Буду очень признателен, если вы посмотрите и помочь.
 Aakash Dave02 нояб. 2017 г., 17:34
Это было очень вдумчиво. Это не то, что я искал для этого варианта, но он определенно помог с другими проблемами в моем проекте. Ура, приятель!
 Rhuari Glen03 нояб. 2017 г., 11:11
Какие проблемы вы видите? Вы создали другой вопрос для этого? @AakashDave

Ваш ответ на вопрос