UITextField получает фокус, а затем сразу теряет фокус из-за возврата YES в textFieldShouldReturn
Вот мои коды:
- (void)viewDidLoad {
[super viewDidLoad];
// passwordTextField cannot get focus after click next key due to this RAC
RAC(self.loginButton, enabled) = [RACSignal combineLatest:@[self.userTextField.rac_textSignal,
self.passwordTextField.rac_textSignal]
reduce:^id (NSString *user, NSString *password) {
if ([user length] > 0 && [password length] > 0) {
return @YES;
}
return @NO;
}];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.userTextField) {
[self.passwordTextField becomeFirstResponder];
} else {
[self loginAction:textField];
}
// passwordTextField cannot get focus after click next key due to returning YES
return YES;
}
- (void)loginAction:(id)sender
{
[self.userTextField resignFirstResponder];
[self.passwordTextField resignFirstResponder];
// some login actions
}
Я хочу, чтобы переместить фокус на passwordTextField, когда нажмите кнопку возврата в userTextField. Но passwordTextField получает фокус, а затем сразу теряет фокус. Я создал подкласс UITextField
и попытаться найти причину. Я обнаружил, что если я верну ДА в функции textFieldShouldReturn
, passwordTextField получит insertText
вызов. Тогда пароль TextField получит resignFirstResponder
позвони немедленно. Я не знаю, почему мы должны вернуть NO в функции textFieldShouldReturn
сейчас. Кто-нибудь может мне помочь?
========
Добавить дополнительную информацию:
Я обнаружил, что эта проблема появится только когда я использую ReactiveCocoa. Версия ReactiveCocoa - 2.5.
2 ответа
Просто установите тег для вашего текстового поля и введите этот код
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
if (textField.tag == 0) {
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
} else {
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return NO;
}
Я надеюсь, что это поможет вам здорово.
Если вам нравится мой ответ, примите и подтвердите мой ответ
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSUInteger index = textField.tag;
if (index == 1 || textField == self.passwordTextField)
{
[textField resignFirstResponder];
}
else
{
[textField becomeFirstResponder];
}
return NO;
}