2010-03-13 9 views
4

Voici le code que je dois créer un UIAlertView avec une zone de texte.UIAlertView - récupère la valeur du champ de texte du champ de texte ajouté via le code

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter A Username Here"  message:@"this gets covered!" 
               delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:@"OK!", nil]; 
    UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)]; 

    CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0, 60); 
    [alert setTransform:myTransform]; 
    alert.tag = kAlertSaveScore; 

    [myTextField setBackgroundColor:[UIColor whiteColor]]; 
    [alert addSubview:myTextField]; 
    [alert show]; 
    [alert release]; 
    [myTextField release]; 

Ma question est, comment puis-je obtenir la valeur du champ de texte dans:

- (void) alertView:(UIAlertView *) actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 

} 

Je sais que je peux obtenir les trucs standard pour la alertview tels que actionSheet.tag et tel, mais comment aurais-je le textfield ci-dessus?

Répondre

6
@interface MyClass { 
    UITextField *alertTextField; 
} 

@end 

Et au lieu de le déclarer, il suffit d'utiliser localement.

//... 
    alertTextField = [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)]; 
    //... 

- (void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    NSString *text = alertTextField.text; 
    alertTextField = nil; 
} 
6

Donnez-lui juste une étiquette, et trouvez-la en utilisant l'étiquette plus tard. Ainsi, en utilisant votre code:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter A Username Here"  message:@"this gets covered!" 
              delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:@"OK!", nil]; 
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)]; 

CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0, 60); 
[alert setTransform:myTransform]; 
alert.tag = kAlertSaveScore; 

// Give the text field some unique tag 
[myTextField setTag:10250]; 

[myTextField setBackgroundColor:[UIColor whiteColor]]; 
[alert addSubview:myTextField]; 
[alert show]; 
[alert release]; 
[myTextField release]; 

Ensuite, dans le rappel, où que se trouve être et sans avoir à se soucier de la gestion de la mémoire ou de la gestion de l'état du champ texte:

- (void) alertView:(UIAlertView *) actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    // Get the field you added to the alert view earlier (you should also 
    // probably validate that this field is there and that it is a UITextField but...) 
    UITextField* myField = (UITextField*)[actionSheet viewWithTag:10250]; 
    NSLog(@"Entered text: %@", [myField text]); 
} 
Questions connexes