Переход к следующему UITextField при нажатии «Далее» - PullRequest
35 голосов
/ 10 февраля 2012

У меня есть приложение для iPad, в котором есть форма регистрации.Форма очень проста и содержит только два UITextFields для имени и адреса электронной почты.

Первый TextField предназначен для имени кандидата, когда они вводят свое имя и нажимают «Далее» на клавиатуре.автоматически перейти к следующему адресу электронной почты TextField для редактирования.

Есть идеи, как настроить следующую кнопку клавиатуры для перехода к следующей клавиатуре?

Спасибо

Ответы [ 7 ]

75 голосов
/ 10 февраля 2012

Вам необходимо сделать свой контроллер представления делегатом UITextField и реализовать метод делегата UITextField:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == nameField) {
        [textField resignFirstResponder];
        [emailField becomeFirstResponder];
    } else if (textField == emailField) {
        // here you can define what happens
        // when user presses return on the email field
    }
    return YES;
}

Swift версия:

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == nameField {
        textField.resignFirstResponder()
        emailField.becomeFirstResponder()
    } else if textField == emailField {
        // here you can define what happens
        // when user presses return on the email field
    }
    return true
}

Вы можететакже хотите прокрутить вид, чтобы emailField стал видимым.Если ваш контроллер представления является экземпляром UITableViewController, это должно произойти автоматически.Если нет, вам следует прочитать этот документ Apple , особенно Перемещение содержимого, расположенного под клавиатурой часть.

10 голосов
/ 13 июля 2015

Быстрая версия правильного ответа.

По моему опыту, вам не нужно resignFirstResponder при переключении textFields.

В этом примере это просто текстовые поля вашего основного имени пользователя и пароля.

Клавиатура «Клавиша возврата» в раскадровке для имени пользователя установлена ​​на «Далее», а клавиша для пароля - «Готово».

enter image description here

Затем просто подключите делегатов для этих двух текстовых полей и добавьте это расширение, и вы почти закончили.

extension LoginViewController: UITextFieldDelegate {

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        if textField == textFieldPassword {
            self.view.endEditing(true)
        } else {
            textFieldPassword.becomeFirstResponder()
        }
        return true
    }

}
10 голосов
/ 10 февраля 2012

В дополнение к ответу @lawicko я часто изменяю текст кнопки, чтобы дать последний штрих (например, говорит next, когда есть больше полей, и затем done, когда на последнем):

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    BOOL isLastTextField = //.. your logic to figure out if the current text field is the last

    if (isLastTextField) {
        textField.returnKeyType = UIReturnKeyDone;
    } else {
        textField.returnKeyType = UIReturnKeyNext;
    }
}
5 голосов
/ 29 июня 2015

Более последовательный и надежный способ - использовать NextResponderTextField Вы можете полностью настроить его из построителя интерфейса.

Все, что вам нужно сделать, это

  1. Установитьтип класса вашего UITextField будет NextResponderTextField enter image description here
  2. Затем установите выход nextResponderField так, чтобы он указывал следующему респонденту, что это может быть что угодно UITextField или любой подкласс UIResponder,Это может быть также UIButton, и библиотека достаточно умна, чтобы вызывать событие TouchUpInside кнопки, только если она включена.enter image description here enter image description here

Вот библиотека в действии:

enter image description here

2 голосов
/ 15 ноября 2018

A Swift 4 расширение.Просто передайте массив UITextFields, и он соединит каждый из них до следующего, пока последний не сместит первого респондента (скрывает клавиатуру):

0 голосов
/ 08 мая 2015

Сделать вывод для текстового поля, затем

viewController.h

(IBAction)textFieldDoneEditing:(id)sender;

viewController.m

(IBAction)textFieldDoneEditing:(id)sender {
    [textField resignFirstResponder];
    if (textField == nameField) {
        [emailField becomeFirstResponder];
    } 
} 

Установить связь между (показать инспектор соединений> Отправленные события) didEndOnExit и textFieldDoneEditing

0 голосов
/ 12 декабря 2014
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
    if (textField == self.textFieldName)
    {
        [self.textFieldName resignFirstResponder];
        [self.textFieldPassword becomeFirstResponder];
    }
    else if (textField == self.textFieldPassword)
    {
        [self.textFieldPassword resignFirstResponder];

        [self login:self];
    }

    return true;
}




@interface MLLoginViewController ()<UITextFieldDelegate>

@end

@implementation MLLoginViewController



- (void)viewDidLoad {
    [super viewDidLoad];
    self.textFieldName.delegate = self;
    self.textFieldPassword.delegate = self;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...