按外接键盘上的Return键关闭UIAlertView

Tho*_*ann 9 uialertview ios

我正在显示一个像这样的简单警报视图:

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.

Kev*_*lia 3

以下内容对我有用......

首先将处理警报视图的视图控制器设置为第一响应者:

[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)