UITextField в UITableViewCell и статьFirstResponder на выбранной клавиатуре ячейки показать / скрыть сбой - PullRequest
0 голосов
/ 03 января 2019

У меня есть такая иерархия представлений:

Контроллер представлений

UITableView

UITableViewCell

UITextField

У меня в настройках UITableViewCell a textField, и я планирую сделать этот textField становитьсяFirstResponder, как только пользователь нажмет на ячейку.Первая проблема заключается в том, что textField получает события касаний, и ячейка не выбирается из-за этого, поэтому, когда пользователь нажимает вправо на textField, ячейка не выбирается, и я не могу обновить выбранный пользовательский интерфейс ячейки.Я думал, что могу сделать isUserInteractionEnabled=false на textField, поэтому после того, как пользователь нажмет на textField, у меня будет правильное поведение выбора в моих ячейках.Все идет нормально.Теперь я хочу обработать этот выбор в методе setSelected в моей пользовательской ячейке.Проблема в том, что если клавиатура уже на экране, и я выполняю becomeFirstResponder() на textField, то клавиатура прячется и сразу же появляется снова.Обычно я ожидаю, что эта клавиатура останется на своем месте, не пытаясь скрыть и показать снова.Вот код:

class StringFieldTableViewCell: UITableViewCell {

    @IBOutlet weak var pinLine: UIView!
    @IBOutlet weak var pinLineFocused: UIView!
    @IBOutlet weak var textField: UITextField!


    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = .none
        self.textField.isUserInteractionEnabled = false
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        self.textField.isUserInteractionEnabled = selected
        if selected {
            self.textField.becomeFirstResponder()
        }
        self.pinLine.isHidden = selected
        self.pinLineFocused.isHidden = !selected
    }
}

Кто-нибудь знает, как решить эту проблему с отображением / скрытием клавиатуры и почему клавиатура пытается сначала спрятаться, а затем показать в очень короткое время?

...