#swift #uitableview #textfield
#swift #uitableview #текстовое поле
Вопрос:
У меня есть текстовое поле в каждой ячейке моего tableview. Я хочу выйти из клавиатуры, когда пользователи нажимают клавишу возврата. Я пытался:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Но это не работает, и я, похоже, не могу найти ссылку на текстовое поле внутри ячейки моего tableview. Пожалуйста, помогите, спасибо!
Ответ №1:
Я предполагаю, что вы создали IBOutlets
свое текстовое поле в своем классе cell.
Предоставьте свой делегат текстового поля self в cellForRow
методе источника данных UITableView
cell.yourTextField.delegate = self
Ответ №2:
Вы можете предоставить раскадровку формы делегата.
Ответ №3:
Вы должны разрешить вашему пользовательскому UITableViewCell
классу подтверждать UITextFieldDelegate
:
class TableViewCell: UITableViewCell, UITextFieldDelegate {
// ...
}
В awakeFromNib
этом случае ваши текстовые поля должны делегироваться классу cell:
override func awakeFromNib() {
// ...
textField.delegate = self
// ...
}
Наконец, реализовать textFieldShouldReturn
:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Надеюсь, это помогло.
Комментарии:
1. это неправильно. Если в
awakeFromNib
нем реализовано, оно не будет частьюViewController
, а будет только частью пользовательской ячейки, текстовое поле которой находится в таблице. Он должен быть вcellForRow
2. @RajanMaheshwari С архитектурной точки зрения, позволять уровню контроллера обрабатывать компоненты ячейки не очень хорошая идея, это подчеркивает теорию «Массивных контроллеров представления» .
3. Брат, это связано с
self
. Вы не можете преобразовать self в класс customcell. Если вы создаете, то вам нужно реализоватьUITextFieldDelegate
в пользовательской ячейке. И дело не в компонентах. Вы можете обрабатывать элементы макета проектированияawakeFromNib
, но в случае делегирования возникает право собственности. Если вы реализуете делегирование self в пользовательском классе cell, то вам нужно снова передать это через делегат в вашемViewController
, который действует как дополнительные накладные расходы.4. @RajanMaheshwari Я надеюсь, что вы не расстроены этим обсуждением, потому что я совсем не расстроен 🙂 Подтверждая, что textFieldShouldReturn реализован в пользовательском классе cell, «Если вы реализуете делегирование для self в пользовательском классе cell, вам нужно снова передать это через делегат в вашем ViewController, который действует как дополнительные накладные расходы» не могли бы вы попробовать сделать это самостоятельно (добавить текстовое поле в ячейку и реализовать, добавитьТекстовое поле. делегируйте = self для awakeFromNib и реализуйте TextFields shouldreturn), он отлично работает без необходимости передачи его контроллеру.
5. что делать, если что-то нужно изменить
ViewController
, скажем, изменить цвет кнопки или, скажем, обновить какую-то метку, которая является частью ViewController`при каждом нажатии клавиши return. Затем вам нужно передать что-то изtextFieldShouldReturn
делегата в ваш класс контроллера. В основном другой делегат или какое-то уведомление или какое-то закрытие