好的,所以我有一个以两种方式显示的视图控制器:
基本上,这是一个设置视图,可以通过导航到应用程序的设置部分或按需显示,如果用户需要在视图中输入内容。
在设置视图中,我有一个UIAlertView,弹出一个用户名和密码样式警报。第一个文本字段设置为firstResponder,键盘显示为正常。如果我解除警报(通过取消或任何其他按钮),键盘将消失。
现在,针对这个问题: 如果我通过segue显示视图控制器,一切正常。 如果我手动显示,无论我做什么,键盘都不会解雇。
我尝试设置另一个视图作为第一响应者然后辞职,这没有帮助。 我试过调用[self.view endEditing:YES],但这没有用。 我通过以下方式发送了全球resignFirstResponder:
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
但这没有用。 我甚至连接了一个私有API来获得第一个响应者,但是它将第一个响应者报告为(null)。
有什么想法吗?
答案 0 :(得分:0)
创建UIAlertView后,您可以将自己视为UIAlertView的委托。之后:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
方法你可以参考你的文本字段,你可以在上面调用resignFirstResponder。
答案 1 :(得分:0)
我确保在呈现它的视图控制器的视图生命周期的后期显示警告,例如。
- (void)viewDidAppear {
[super viewDidAppear];
[self performSelector:@selector(showTheAlert) afterDelay:0.0];
}
- (void)showTheAlert {
// alloc, init and show the alert here
}
我会使用委托回调来给textView第一响应者,例如
- (void)didPresentAlertView:(UIAlertView *)alertView {
[theUsernameTextField becomeFirstResponder];
}
我会让代表解雇辞职。在不是第一响应者的文本字段上辞职第一响应者没有任何缺点,所以只需重新签名。
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
[theUsernameTextField resignFirstResponder];
[thePasswordTextField resignFirstResponder];
}
答案 2 :(得分:0)
实施以下方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
UITextField *txtField = [alertView textFieldAtIndex:buttonIndex];
[txtField resignFirstResponder];
}