При выполнении действия (с включенным делегатом и протоколом) часть не работает - PullRequest
0 голосов
/ 28 мая 2020

У меня есть собственный класс ячеек под названием «customerInformationTableViewCell». У меня есть текстовое поле в этой ячейке. Я создал действие, которое включается по окончании редактирования. Я создал протокол и делегировал доступ к информации своему контроллеру представления. Но код после охранника (в комплекте) не работает, так как печать («2») не работает. В чем проблема ? Пожалуйста, помогите!

@IBAction func textField(_ sender: UITextField) {
        print("1")
        guard let cell = sender.superview as? customerInformationTableViewCell else { return }
        print("2")
        let indexPath = (sender.superview?.superview as! UITableView).indexPath(for: cell)
        self.delegate?.shareDetailsInvoice(row: indexPath!.row, input: textField.text!)
    }

1 Ответ

1 голос
/ 28 мая 2020

один обходной путь - использовать это расширение

import UIKit
  extension UIView {
    func lookForSuperviewOfType<T: UIView>(type: T.Type) -> T? {
        guard let view = self.superview as? T else {
            return self.superview?.lookForSuperviewOfType(type: type)
        }
        return view
    }
} 

Как его использовать

let cell = sender.lookForSuperviewOfType(type: customerInformationTableViewCell.self)

И получить TableView

let tableView = sender.lookForSuperviewOfType(type: UITableView.self)

Итак, ваша функция станет вот так

 @IBAction func textField(_ sender: UITextField) {
        print("1")
        guard let cell = sender.lookForSuperviewOfType(type: customerInformationTableViewCell.self)  else { return }
        print("2")
        let indexPath = sender.lookForSuperviewOfType(type: UITableView.self)?.indexPath(for: cell)
        self.delegate?.shareDetailsInvoice(row: indexPath!.row, input: textField.text!)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...