UIAlertView - получить значение текстового поля из текстового поля, добавленного с помощью кода - PullRequest
4 голосов
/ 14 марта 2010

Вот код, который я должен создать UIAlertView с текстовым полем.

    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];  

У меня вопрос, как мне получить значение из текстового поля в:

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

}

Я знаю, что могу получить стандартный материал для представления предупреждений, такой как actionSheet.tag и тому подобное, но как я могу получить созданное выше текстовое поле?

Ответы [ 2 ]

6 голосов
/ 14 марта 2010

Просто дайте ему тег, и найдите его, используя тег позже. Итак, используя ваш код:

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];

Затем, в обратном вызове, где бы это ни происходило, и не нужно было беспокоиться об управлении памятью или состоянии текстового поля:

- (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]);
}
6 голосов
/ 14 марта 2010
@interface MyClass {
    UITextField *alertTextField;
}

@end

И вместо того, чтобы объявить это локально, просто используйте это.

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

- (void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSString *text = alertTextField.text;
    alertTextField = nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...