Как получить доступ к пользовательскому UITableViewCell из textFieldDidEndEditing? - PullRequest
0 голосов
/ 29 января 2019

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

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

Я использую textFieldDidEndEditing в моем UIViewController, чтобыобнаруживать изменения текста и не иметь доступа к ячейке, чтобы установить мое свойство hasError.

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

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

Но я не уверен, что это лучший подход или какзапустить событие.

1 Ответ

0 голосов
/ 29 января 2019

Вы можете использовать Protocol.https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Protocol.html

Простой пример:

cellForRow

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = ....
    cell.delegate = self
    return cell
}

Ваш подкласс UITableViewCell:

class Cell: UITableViewCell, UITextFieldDelegate {

    // MARK: - Properties

    weak var delegate: CellDelegate?
    ....

    // MARK: - Functions

    func textFieldDidEndEditing(_ textField: UITextField) {
        self.delegate?.cell(self, textFieldDidEndDiting: textField)
    }
}

Ваш протокол

protocol CellDelegate: class {
    func cell(_ cell: Cell, textFieldDidEndDiting textField: UITextField)
}

Затем, наконец, настройте ваш контроллер на этот протокол следующим образом:

class ViewController: UIViewController, CellDelegate {

    func cell(_ cell: Cell, textFieldDidEndDiting textField: UITextField) {

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...