UITextField获取焦点,然后由于在textFieldShouldReturn中返回YES而立即失去焦点

这是我的代码:

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

在userTextField中单击返回键时,我想将焦点移至passwordTextField。 但passwordTextField获得焦点,然后立即失去焦点。 我创build了UITextField的子类,并试图find原因。 我发现,如果我在函数textFieldShouldReturn返回YES,passwordTextField将得到一个insertText调用。 然后passwordTextField将立即收到resignFirstResponder调用。 我不知道为什么我们现在必须在函数textFieldShouldReturn 返回NO 。 任何人都可以帮助我?

========

添加更多信息:

我发现这个问题只会在我用户ReactiveCocoa时出现。 ReactiveCocoa的版本是2.5。

只需设置标记您的文本字段,并把这个代码

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