Я пытаюсь использовать iOS 8 UIAlertController
вместо того, где я бы использовал UIAlertView
в прошлом. Я хочу, чтобы пользователь мог ввести текст в это предупреждение и нажать «ОК» для обработки текста или «Отмена» для отмены.UIAlertController с текстовым полем - нажатие кнопки возврата только скрывает клавиатуру, не выполняет действия?
Вот основной код:
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
«s программно. И в любом случае это звучит беспорядочно/хаки. Мне что-то не хватает?
Я также не могу найти способ запускать действия программно. Какой надзор ... – elsurudo