xcode UIAlertView - 从通过代码添加的文本字段中检索文本字段值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2440053/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 19:11:17  来源:igfitidea点击:

UIAlertView - retrieve textfield value from textfield added via code

iphonexcode

提问by George

Here is the code I have to create an UIAlertView with a textbox.

这是我必须使用文本框创建 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];  

My question is, how do I get the value from the textfield in:

我的问题是,如何从文本字段中获取值:

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

}

I know I can get the standard stuff for the alertview such as actionSheet.tag and such, but how would I get the above created textfield?

我知道我可以获得警报视图的标准内容,例如 actionSheet.tag 等,但是我如何获得上面创建的文本字段?

回答by Ed Marty

@interface MyClass {
    UITextField *alertTextField;
}

@end

And instead of declaring it locally, just use that.

而不是在本地声明它,只需使用它。

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

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

回答by Jason Coco

Just give it a tag, and find it using the tag later. So, using your 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];

Then, in the call-back, wherever that happens to be and without having to worry about memory management or state management of the text field:

然后,在回调中,无论发生在哪里,而不必担心文本字段的内存管理或状态管理:

- (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]);
}