2012-11-05 7 views
6

Ich möchte eine Alertview mit zwei uitextfields darin erstellen.So erstellen Sie zwei Textfelder in einer Alarmansicht, IOS

method: 
//show alertview for file input 
- (IBAction)showAddFiles:(id)sender { 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Enter File Details" 
                 message:nil 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"Add", nil]; 



    UITextField *textFieldDescription = [message textFieldAtIndex:0]; 
    textFieldDescription.placeholder = @"File Description : Ex. Acat Briefing"; 
    UITextField *textFieldFileName = [message textFieldAtIndex:1]; 
    textFieldFileName.placeholder = @"Exact File Name : Ex. acat.pdf"; 


    [message show]; 
} 


//make sure file description is long enoguh 
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    NSString *inputText = [[alertView textFieldAtIndex:0] text]; 

    if([inputText length] <= 15 && [inputText length] >= 4) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 

//handle add button 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 
    if([title isEqualToString:@"Add"]) 
    { 
     UITextField *fileDescription = [alertView textFieldAtIndex:0]; 
     UITextField *fileName = [alertView textFieldAtIndex:1]; 
     NSLog(@"Desc: %@\nName: %@", fileDescription.text, fileName.text); 
    } 
} 

Fehler:

* app Beenden aufgrund abgefangene Ausnahme 'NSInvalidArgumentException', Grund: 'textFieldIndex (0) außerhalb der Grenzen des Arrays von Textfeldern'

Warum bekomme ich diesen Fehler, wie kann ich zwei uitextfields in einer Alert-Ansicht erstellen?

========= Arbeitslösung =========== Danke für die Antwort unten funktioniert, wenn Sie nur zwei Klartextfelder benötigen, ist

//show alertview for file input 
- (IBAction)showAddFiles:(id)sender { 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Enter File Details" 
                 message:nil 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"Add", nil]; 



    [message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput]; 
    UITextField *fileDescription = [message textFieldAtIndex:0]; 
    [email protected]"Ex. acat.pdf"; 
    [[message textFieldAtIndex:1] setSecureTextEntry:NO]; 
    UITextField *fileName= [message textFieldAtIndex:1]; 
    [email protected]"Ex. Acat Briefing"; 

    [message show]; 
} 
+1

Versuchen Sie, die Textfeldzuweisung umzudrehen. Erstellen Sie zuerst ein Textfeld und dann [message textfieldatindex: 0] = newTextField – Hackmodford

Antwort

23

Nachdem Sie die "Nachricht" Alarmansicht zugewiesen. Fügen Sie das zu Ihrem Code hinzu:

[message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput]; 
[[message textFieldAtIndex:1] setSecureTextEntry:NO]; 

Dies wird Ihre Warnung anzeigen zwei Textfeld innen.

+0

Aber es scheint, das OP will zwei Klartextfelder, nicht eine Ebene und eine sichere. – rmaddy

+0

@rmaddy Ich habe meinen Kommentar bearbeitet. Bitte prüfe. –

+0

Ausgezeichnet. Das ist so eine einfache Lösung. Warum habe ich nicht daran gedacht? :) – rmaddy

0
+0

Diese Lösung repliziert, was bereits von der 'UIAlertView'-API bereitgestellt wird. Außerdem benötigt das OP zwei einfache Textfelder, nicht ein einfaches und ein sicheres. – rmaddy

+0

Ich versuchte dies zuvor, fand ich es ist keine gute Lösung, da es schwierig ist, zeichnen Rect und Tasten sind aus irgendeinem Grund nicht sichtbar –

+0

Fehler: 404 nicht gefunden. Ersetzen Sie den Link –

3

Sie erhalten diesen Fehler, weil die UIAlertView keine Textfelder enthält. Da die Textfeldsammlung der Alarmansicht leer ist, wenn Sie versuchen, [alertView textFieldAtIndex:0] aufzurufen, enden Sie mit der NSInvalidArgumentException und einem Absturz.

+0

Das OP erstellt KEINE Textfelder. Lesen Sie den Code erneut. – rmaddy

+0

Guter Anruf. Das ist es, was ich in Eile zur Antwort bekomme. –

4

Der Fehler, den Sie erhalten, tritt auf, weil es in Ihrem UIAlertView, "Nachricht" keine Textfelder gibt. Die Instanzmethode "textFieldAtIndex" existiert, um auf textFields in einer UIAlertView zuzugreifen, die mit einem bestimmten Stil erstellt wurde, wie UIAlertViewStylePlainTextInput, UIAlertViewStyleSecureTextInput oder . Diese Stile werden in der Eigenschaft "alertViewStyle" festgelegt. Zum Beispiel:

[message setAlertViewStyle:UIAlertViewStylePlainTextInput]; 

können Sie verwenden „textFieldAtIndex“ nach Einstellung dieser Eigenschaft, aber leider sieht es aus, als ob keine dieser Arten Ihre Bedürfnisse.

Was ich zuvor getan habe, ist ein Standard-Stil UIAlertView (wie Sie bereits getan haben), und fügen Sie UITextFields als Unteransichten der UIAlertView.

Beispiel:

//Create the alert then add any labels and text fields as subviews. 
//You can pad out an alertView by adding newline characters in the message. This will 
// give the alertView more space to draw the text fields. 
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Two Text Field Alert" 
                 message:@"\n\n\n\n\n" 
                 delegate:self 
               cancelButtonTitle:@"CanceL" 
               otherButtonTitles:@"OK", nil]; 

UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(16,83,252,25)]; 
textField1.borderStyle = UITextBorderStyleRoundedRect; 
textField1.keyboardAppearance = UIKeyboardAppearanceAlert; 
textField1.delegate = self; 
[message addSubview:textField1]; 

UITextField *textField2 = [[UITextField alloc] initWithFrame:CGRectMake(16,112,252,25)]; 
textField2.placeholder = @"Password"; 
textField2.borderStyle = UITextBorderStyleRoundedRect; 
textField2.keyboardAppearance = UIKeyboardAppearanceAlert; 
textField2.delegate = self; 
[message addSubview:textField2]; 
[message show]; 

[message release]; 
[textField2 release]; 
[textField1 release]; 

Es ist viel ausführlicher und chaotisch ein Login auf diese Weise zu tun, wie auf die Stile Alertview Gegensatz, aber Sie können diese anpassen, wie Sie sehen, passen eine beliebige Anzahl von Subviews hinzuzufügen eine Alarmansicht

Bearbeitet, um Beispiel zu vereinfachen.

1

Wir dürfen nur zwei Textfelder in Alertview erstellen. Hier:

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Change Password" 
               message:@"" 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"OK", nil]; 

alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 
UITextField * alertTextField1 = [alert textFieldAtIndex:0]; 
alertTextField1.keyboardType = UIKeyboardTypeDefault; 
alertTextField1.placeholder = @"Type Current password"; 
[[alert textFieldAtIndex:0] setSecureTextEntry:YES]; 

UITextField * alertTextField2 = [alert textFieldAtIndex:1]; 
alertTextField2.keyboardType = UIKeyboardTypeDefault; 
alertTextField2.placeholder = @"Type New Password"; 

[alert show]; 
Verwandte Themen