Как перемещаться по текстовым полям (кнопки «Далее» / «Готово») - PullRequest
475 голосов
/ 28 августа 2009

Как я могу перемещаться по всем моим текстовым полям с помощью кнопки «Далее» на клавиатуре iPhone?

Последнее текстовое поле должно закрывать клавиатуру.

Я настроил IB кнопки (Далее / Готово), но теперь я застрял.

Я реализовал действие textFieldShouldReturn, но теперь кнопки Next и Done закрывают клавиатуру.

Ответы [ 34 ]

2 голосов
/ 28 августа 2009

в textFieldShouldReturn вы должны проверить, что текстовое поле, в котором вы находитесь в данный момент, не является последним, когда они щелкают далее, и если оно не отменяет клавиатуру.

1 голос
/ 16 мая 2018

Более безопасный и прямой путь, предполагая:

  • делегаты текстового поля установлены на вашем контроллере представления
  • все текстовые поля являются подпредставлениями одного и того же представления
  • текстовые поля имеют теги в том порядке, в котором вы хотите их выполнить (например, textField2.tag = 2, textField3.tag = 3 и т. Д.)
  • переход к следующему текстовому полю произойдет, когда вы нажмете кнопку return на клавиатуре (вы можете изменить ее на next , done и т. Д. )
  • вы хотите, чтобы клавиатура отклонялась после последнего текстового поля

Swift 4.1:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        let nextTag = textField.tag + 1
        guard let nextTextField = textField.superview?.viewWithTag(nextTag) else {
            textField.resignFirstResponder()
            return false
        }

    nextTextField.becomeFirstResponder()

    return false

    }
}
0 голосов
/ 25 октября 2017

Swift 4 для mxcl ответ:

txtFirstname.addTarget(txtLastname, action: 
#selector(becomeFirstResponder), for: UIControlEvents.editingDidEndOnExit)
0 голосов
/ 14 сентября 2017

Решение Swift 3 , с использованием упорядоченного массива UITextField's

func nextTextField() {
    let textFields = // Your textfields array

    for i in 0 ..< textFields.count{
        if let textfield = textFields[i], textfield.isFirstResponder{
            textfield.resignFirstResponder()
            if i+1 < textFields.count, let nextextfield = textFields[i+1]{
                nextextfield.becomeFirstResponder()
                return
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...