Как получить доступ к вводу из моего текстового поля в UIAlertController с объектным c?
Я меняю все на AlertView на AlertController, но я не могу найти что-либо онлайн для объективного c, которое извлекает то, что пользователь вводит в текстовое поле для AlertController. Вот что я имею:
if ([UIAlertController class]) {
UIAlertController *alertControllerK2 = [UIAlertController
alertControllerWithTitle:@"\u00A0"
message:@"Please enter the first number."
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *K2okAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:nil];
[alertControllerK2 addTextFieldWithConfigurationHandler:^(UITextField *K2TextField)
{
K2TextField.placeholder = NSLocalizedString(@"Please enter the first number.", @"Please enter the first number.");
}];
[alertControllerK2 addAction:K2okAction];
[self presentViewController:alertControllerK2 animated:YES completion:nil];
} else {
UIAlertView *alertK2;
alertK2 = [[UIAlertView alloc]
initWithTitle:@"\u00A0"
message:@"Please enter the first number."
delegate: self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
alertK2.alertViewStyle=UIAlertViewStylePlainTextInput;
[alertK2 show];
}
Проблема в том, что K2TextField определен внутри UIAlertController, поэтому я не могу получить к нему доступ за пределами этого кода. Но если я попытаюсь предопределить это, я получаю сообщение об ошибке. Любая помощь будет принята с благодарностью!
Ответы
Ответ 1
UIAlertController
имеет массив textFields
, который упорядочен, когда вы добавили их (первый, который вы добавили, - это индекс 0). Поскольку это общий массив, вам нужно будет выполнить результат перед доступом к полю text
.
__weak UIAlertController *alertRef = alertController;
UIAlertAction* okAction = [UIAlertAction actionWithTitle:@"Button Text"
handler:^(UIAlertAction * action) {
// access text from text field
NSString *text = ((UITextField *)[alertRef.textFields objectAtIndex:0]).text;
}];
Ответ 2
В моем случае я повторно использую AlertController в разных точках в script, поэтому в моем файле .h в моем файле я сделал его глобальным:
UIAlertController *alertController;
И затем в моем файле реализации .m я присваиваю его текущему предупреждению, например:
alertController = (UIAlertController *)self.presentedViewController;
Приведенное выше извлекает существующее предупреждение и присваивает его глобальному. Для этого вам нужно сначала инициализировать его или создать новый:
UIAlertController* anyALERTname = [UIAlertController alertControllerWithTitle:@"Alert Title" message:yourAlertMessage preferredStyle:UIAlertControllerStyleAlert];
Теперь, когда у вас есть текущий AlertController, вы можете протянуть (и захватить) TextField:
if (alertController) {
//go and get the action field
UITextField *alertText1 = alertController.textFields.firstObject;
NSLog(@"what is alert text? %@",alertText1.text);
}