Как вызвать функцию протокола в контроллере представления? - PullRequest
0 голосов
/ 11 октября 2018

DeviceTableViewCell

Я создаю протокол на своем пользовательском DeviceTableViewCell

protocol DeviceTableViewCellDelegate : NSObjectProtocol {
    func printMe(_ text : String)
}

Я также объявил мой delegate в

weak var delegate: DeviceTableViewCellDelegate?

DevicesViewController

У меня было это

extension DevicesViewController: DeviceTableViewCellDelegate {


    func printMe(_ text : String) {
        let text = "Protocol & Delegate"

        print("........")
        print(text)
        print("........")
    }
}

Я не знаю, как вызвать мой оператор print ().Как можно вызвать это?

Нужно ли мне где-нибудь позвонить printMe()?

Я что-то здесь упустил?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вы просто объявляете, как работает функция делегата, вы еще не вызвали ее.Исходя из контекста, вы можете решить, когда вызывать delegate.printMe(_ text : "Foo").

. Я предлагаю простой пример: передача данных обратно в предыдущий контроллер представления из текущего контроллера представления с использованием делегата .

0 голосов
/ 12 октября 2018

Давайте рассмотрим пример, чтобы понять концепцию.Так как вы уже создали переменную-делегат для вашего протокола.

weak var delegate: DeviceTableViewCellDelegate?

Теперь, чтобы вызвать метод протокола, вам нужно назначить свой делегат некоторому viewController или классу.Давайте назначим в том же виде контроллер в методе viewDidLoad.

override func viewDidLoad(){
   delegate = self
}

Теперь, скажем, нужно вызывать метод протокола, когда какая-то кнопка нажата.Итак, что вам нужно сделать, это вызвать этот метод, как это в методе нажатия кнопки.

delegate?.printMe("Button Pressed")
0 голосов
/ 11 октября 2018

Сначала сделайте следующее:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier", for: indexPath) as! DeviceTableViewCell
cell.delegate = self
}

Затем вы должны вызвать printMe из своей ячейки, чтобы обработать ваше действие

...