it-roy-ru.com

клавиша "iOS" приложения iOS не перейдет в следующее текстовое поле

У меня есть простая сцена (с использованием раскадровки в IB) с текстовым полем Имя пользователя и Пароль. Я установил закрытие клавиатуры, когда вы находитесь в текстовом поле «Пароль», но не можете заставить следующую (возвратную) кнопку работать с именем пользователя, чтобы переключить фокус (или «Первый ответчик») на текстовое поле «Пароль».

Я закрываю клавиатуру в текстовом поле «Пароль», например так:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
    [theTextField resignFirstResponder];
}
return YES;
}

Я знаю, что это что-то похожее на это, но просто не могу прибить это.

40
BamBamBeano

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

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}
88
rob mayoff

Я использую этот код, который позволяет мне контролировать поведение формы в раскадровке :

-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    if(textField.returnKeyType==UIReturnKeyNext) {
        UIView *next = [[textField superview] viewWithTag:textField.tag+1];
        [next becomeFirstResponder];
    } else if (textField.returnKeyType==UIReturnKeyDone) {
        [textField resignFirstResponder];
    }
    return YES;
} 

Все, что вам нужно, это назначить значение заказа как tag и returnkey в соответствии с Next или Done на каждом элементе управления вводом.

40
Esteve

для тех, кто хочет использовать язык Swift: 

class MyClass: UIViewController, UITextFieldDelegate {

@IBOutlet weak var text1: UITextField!
@IBOutlet weak var text2: UITextField!
@IBOutlet weak var text3: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    text1.delegate = self
    text2.delegate = self
    text3.delegate = self


}

//....

func textFieldShouldReturn(textField: UITextField) -> Bool{
    if textField == self.text1 {
        self.text2.becomeFirstResponder()
    }else if textField == self.text2{
        self.text3.becomeFirstResponder()
    }else{
        self.text1.becomeFirstResponder()
    }
    return true
 }

 //...

}

:-)

11
N3tMaster

Вы должны добавить UITextFieldDelegate в заголовочный файл . Затем вы должны установить

theTextField.delegate = self;

в методе viewDidLoad . После этого вы можете продолжить

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}
9
FTFT1234

Существует много решений этой проблемы. См. Ответы на этот вопрос: Как перемещаться по текстовым полям (кнопки Далее/Готово) .

Подробнее читайте в Справочник по классам UIResponder .

5
sherbondy

Вот что вы бы поставили:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.usernameField) {
        [self.textPassword becomeFirstResponder];
    }
return YES;
}
3
bryanjclark

Вот версия Swift 2.0 Роба Майофа

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == self.emailTextField {
        self.passwordTextField.becomeFirstResponder()
    }else{
        self.passwordTextField.resignFirstResponder()
    }
    return false
}
0
egeelabs

У меня проблема с тем, что текстовое поле пароля получает фокус, а затем сразу теряет фокус. Наконец я обнаружил, что нам лучше вернуть NO в функцию textFieldShouldReturn :. Если мы вернем YES, текстовое поле получит вызов insertText :. Тогда он потеряет фокус. Не знаю причину.

Я создал новый вопрос для этой проблемы: UITextField получить фокус, а затем сразу же потерять фокус из-за возврата YES в textFieldShouldReturn

Если кто-то знает причину, пожалуйста, дайте мне знать. Благодарю.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    // we'd better return NO here
    return NO;
}
0
Harrison Xi

Вы можете использовать этот подкласс поля UIText, который динамически изменяет UIReturnKey в соответствии с условием text/string, а затем выполнить действие продолжения в textFieldShouldReturn: (UITextField *) textField делегат

if (textField.returnKeyType == UIReturnKeyNext)

https://github.com/codeinteractiveapps/OBReturnKeyTextField
0
CodeInteractive