2014-11-05 3 views
17

Ich ändere alles von AlertView zu AlertController, aber ich kann nichts online für objektive c finden, die abfragt, was der Benutzer in einem Textfeld für den AlertController eingibt. Hier ist, was ich habe:Wie greife ich auf die Eingabe von meinem Textfeld in UIAlertController mit Ziel 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]; 
     } 

Das Problem ist, dass K2TextField innerhalb des UIAlertController definiert ist, so kann ich es nicht außerhalb dieses Codes zuzugreifen. Aber wenn ich es vordefiniere, erhalte ich eine Fehlermeldung. Jede Hilfe würde sehr geschätzt werden!

Antwort

31

Die UIAlertController hat ein Array von textFields, die nach dem Hinzufügen sortiert sind (das erste, das Sie hinzugefügt haben, ist Index 0). Da es sich um ein generisches Array handelt, müssen Sie das Ergebnis vor dem Zugriff auf das Feld text umsetzen.

__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

groß Antwort .... Vielen Dank – Abhishek

4

In meinem Fall bin ich wieder mit dem AlertController an verschiedenen Stellen im Skript so in meinem Header .h-Datei ich es global gemacht:

UIAlertController *alertController; 

Und dann in meiner Implementierung .m-Datei Ich weise es der aktuellen Warnung wie folgt zu:

Das obige ruft die vorhandene Warnung ab und weist sie dem globalen zu. Dazu müssen Sie zuerst arbeiten, um es initialisieren, oder eine neue erstellen:

UIAlertController* anyALERTname = [UIAlertController alertControllerWithTitle:@"Alert Title" message:yourAlertMessage preferredStyle:UIAlertControllerStyleAlert]; 

Nun, da Sie die aktuelle AlertController haben, können Sie (und greifen) erreichen, die TextField-:

if (alertController) { 

    //go and get the action field 

    UITextField *alertText1 = alertController.textFields.firstObject; 

    NSLog(@"what is alert text? %@",alertText1.text); 


} 
Verwandte Themen