Переключение между UITextFields при нажатии кнопки возврата - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь, чтобы мой 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 ]

0 голосов
/ 11 ноября 2018

Для решения частной проблемы

if let nextField = self.view.viewWithTag(textField.tag + 1) as? UITextField 

но проблема в производительности viewWithTag рекурсивный поиск в подпредставлениях

0 голосов
/ 11 ноября 2018

Создать коллекцию розеток и подключить к ней каждое текстовое поле

@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
} 
...