我正在显示一个像这样的简单警报视图:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"msg" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
Run Code Online (Sandbox Code Playgroud)
现在,如果用户连接了外部(蓝牙)键盘,我想在用户键入Return键时关闭警告对话框.
我该如何做到这一点?
这里的挑战是学习按键盘上的任何键.一旦知道了,解雇对话就很简单了[UIAlertView dismissWithClickedButtonIndex:...].
我试图实现该[UIViewController keyCommands函数,返回"\ r"的处理程序,但这仅在我的主视图显示时有效,而不是在显示警报时.
您可以在此处查看示例项目:https://github.com/tempelmann/AlertViewReturnKeyDismissal
注意:到目前为止,下面两个发布的解决方案通常不起作用,但仅限于从内部显示警报viewDidLoad.但是,当我显示过去的警报时,我需要这个工作viewDidLoad.
以下内容对我有用......
首先将处理警报视图的视图控制器设置为第一响应者:
[self becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)
接下来请确保在视图控制器上重写以下方法:
- (BOOL)canBecomeFirstResponder {
return YES;
}
-(NSArray *)keyCommands {
return @[[UIKeyCommand keyCommandWithInput:@"\r" modifierFlags:0 action:@selector(enterPressed)]];
}
Run Code Online (Sandbox Code Playgroud)
然后,在显示警报视图后,由于视图控制器仍然是第一响应者,因此您可以简单地让您的enterPressed方法关闭警报视图:
-(void)enterPressed {
[self.alert dismissWithClickedButtonIndex:0 animated:YES];
}
Run Code Online (Sandbox Code Playgroud)