У меня есть такая иерархия представлений:
Контроллер представлений
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
}
}
Кто-нибудь знает, как решить эту проблему с отображением / скрытием клавиатуры и почему клавиатура пытается сначала спрятаться, а затем показать в очень короткое время?