2014-11-05 3 views
17

Я изменяю все, начиная от AlertView до AlertController, но я не могу найти что-либо онлайн для объективного c, которое извлекает то, что пользователь вводит в текстовое поле для AlertController. Вот что у меня есть:Как мне получить доступ к вводу из моего текстового поля в UIAlertController с объектным c?

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, поэтому я не могу получить доступ к нему за пределами этого кода. Но если я попытаюсь предопределить это, я получаю сообщение об ошибке. Любая помощь будет принята с благодарностью!

ответ

31

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; 
             }]; 
+0

большой ответ .... большое спасибо – Abhishek

4

В моем случае я снова с помощью AlertController в различных точках в сценарии так в моем заголовке .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); 


}