Подтвердить что ты не робот

Перемещение по следующему UITextField, когда "Next" Tapped

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

Первый TextField предназначен для имени кандидатов. Когда они вводят свое имя и нажимают "Next" на клавиатуре, я хочу, чтобы это автоматически переместилось на следующий текстовый экран E-mail для редактирования.

Любая идея, как я могу установить следующую кнопку на клавиатуре, чтобы перейти к следующей клавиатуре?

Спасибо

4b9b3361

Ответ 1

Вам нужно сделать свой контроллер представлений делегатом 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;
}

Быстрая версия:

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, особенно перемещение содержимого, находящегося под частью клавиатуры.

Ответ 2

Кроме ответа @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;
    }
}

Ответ 3

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

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

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

Клавиша "return key" в раскадровке для имени пользователя установлена ​​в "Next", а для пароля - "Готово".

enter image description here

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

extension LoginViewController: UITextFieldDelegate {

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

}

Ответ 4

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

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

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

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

enter image description here

Ответ 5

- (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;

Ответ 6

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

viewController.h

(IBAction)textFieldDoneEditing:(id)sender;

viewController.m

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

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