Я пытаюсь использовать iOS 8 UIAlertController
вместо того, где раньше использовал бы 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
UIAlertViewStylePlainTextInput
. Затем, если пользователь нажал кнопку "Возврат" на клавиатуре после ввода текста, метод UIAlertViewDelegate willDismissWithButtonIndex:
будет вызываться с некоторым buttonIndex
(в зависимости от того, какие кнопки были указаны в UIAlertView
).
В новом UIAlertController
, если пользователь нажимает кнопки "ОК" или "Отмена", их соответствующие действия выполняются, как и ожидалось; но если пользователь просто нажимает клавишу "Возврат" на клавиатуре, он просто скрывает клавиатуру, но предупреждение остается на экране, и никаких действий не выполняется.
Я подумал о настройке текстового поля, чтобы установить UITextFieldDelegate
в self
, а затем, возможно, переопределить метод textFieldDidReturn:
, но я также не знаю, есть ли способ вызвать один из UIAlertController
программно. И в любом случае это звучит беспорядочно/хаки. Мне что-то не хватает?