Переключение между UITextFields при нажатии кнопки возврата
Я пытаюсь, чтобы мой UITextFields переключился на следующий, когда нажата кнопка возврата. Вот мой код:
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
// Try to find next responder
if let nextField = textField.superview?.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
print("success")
} else { //if textField.text != nil {
textField.resignFirstResponder()
print("error")
}
return false
}
Я использую этот код все время с другими проектами. Однако это исключение. У меня есть каждый элемент в отдельном представлении стека, и все эти представления стека находятся в представлении стека суперпредставления. Как только я запускаю приложение, я нажимаю кнопку возврата, и он переходит к оператору else и подает в отставку первого респондента. Мне нужно, чтобы запустить nextField.becomesFirstResponder()
Вот скриншот
2 ответа
Чтобы решить частную проблему
if let nextField = self.view.viewWithTag(textField.tag + 1) as? UITextField
но проблема в производительности viewWithTag
рекурсивный поиск в подпредставлениях
Создайте Outlet Collection и подключите к ней каждое текстовое поле.
@IBOutlet var textFields: [UITextField]!
после того, как в текстовом поле делегат функции использовать это:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let nextIndex = textField.tag + 1
if textFields.count > nextIndex {
let nextField = textFields[nextIndex]
nextField.becomeFirstResponder()
} else {
textField.resignFirstResponder()
}
return false
}