我正在尝试使用 iOS 8UIAlertController
来代替我UIAlertView
过去使用的地方。我希望用户能够在此警报中输入文本并点击“确定”来处理文本或“取消”来取消。
这是基本代码:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Change Value" message:@"Enter your new value."];
[alert addTextFieldWithConfigurationHandler:nil];
[alert addAction: [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
UITextField *textField = alert.textFields[0];
NSLog(@"text was %@", textField.text);
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"Cancel pressed");
}]];
[presentingVC presentViewController:alert animated:YES completion:nil];
对于旧的UIAlertView
,我会用alertViewStyle
of标记它UIAlertViewStylePlainTextInput
。然后,如果用户在输入文本后点击键盘上的“Return”按钮,UIAlertViewDelegate 方法willDismissWithButtonIndex:
将被调用一些buttonIndex
(取决于在 中指定了哪些按钮UIAlertView
)。
在新的UIAlertController
中,如果用户点击“确定”或“取消”按钮,那么他们的相应动作会按预期执行;但如果用户只是按下键盘上的“Return”键,它只是隐藏了键盘,但警报仍然在屏幕上并且不执行任何操作。
我考虑过配置文本字段以设置UITextFieldDelegate
to self
,然后可能会覆盖该textFieldDidReturn:
方法,但我也不知道是否有办法以UIAlertController
编程方式调用其中一个操作。无论如何,这听起来有点混乱/骇人听闻。我错过了一些明显的东西吗?