Ячейка во многих разных ViewControllers

У меня есть ячейка, которую я использую в разных виртуальных каналах, потому что мое приложение разделено на разные категории, но все используют одну и ту же ячейку.

Теперь у меня есть кнопка, которая должна вызвать событие, чтобы поделиться им через другие приложения, такие как whastapp или facebook. Проблема в том, что в зависимости от того, в какой категории вы находитесь, у вас есть другой контроллер представления, который будет отображать функцию. Я могу заставить его работать с одним, но не с 10 различными vc в одной ячейке.

Я использовал расширение, чтобы получить parentviewController

extension UIView {
var parentViewController: HomeViewController? {
    var parentResponder: UIResponder? = self
    while parentResponder != nil {
        parentResponder = parentResponder!.next
        if parentResponder is UIViewController {
            return parentResponder as! HomeViewController!
        }
    }
    return nil
} 

Это, очевидно, будет работать только в Home vc.

Как я могу обойти эту проблему?

1 ответ

Решение

Вы можете использовать протокол для обработки вашего действия кнопки в контроллере вида:

protocol ShareEventDelegate: class {
    func didShareButtonSelected()
}

В вашей пользовательской ячейке:

class CustomCell: UITableViewCell {
    weak var shareDelegate: ShareEventDelegate?

    func yourButtonAction() { 
       shareDelegate.didShareButtonSelected?()
    }
}

Затем приведите ваши ViewControllers в соответствие с ShareEventDelegate, например:

extension HomeViewController: ShareEventDelegate {
    func didShareButtonSelected() {
        // handle your action here
    }
}

И в cellForRow:

cell.shareDelegate = self
Другие вопросы по тегам