从UIAlertView获取文本

时间:2013-04-23 13:49:54

标签: ios objective-c uialertview

似乎缺少某些内容,但以下代码为niltitle生成了title1值(即使它正确启动了正确的警报类型并且未指示任何警告或错误)。这个UIAlertView的实现可能会出现什么问题?

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"High Score" message:(NSString *)scoreMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
alert.alertViewStyle= UIAlertViewStylePlainTextInput;
UITextField *title1 = [alert textFieldAtIndex:0];
[alert show];
title1= [alert textFieldAtIndex:0];
NSString *title = title1.text;
NSLog(@"The name is %@",title);
NSLog(@"Using the Textfield: %@",[[alert textFieldAtIndex:0] text]);

4 个答案:

答案 0 :(得分:11)

在代码中的某处显示警报,并从中设置视图控制器作为UIAlertView的委托。然后实现委托以接收事件。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"High Score" message:@"Score Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
alert.alertViewStyle= UIAlertViewStylePlainTextInput;
[alert show];

实施委托方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
   UITextField *textField = [alertView textFieldAtIndex:0];
   NSString *title = textField.text;
   NSLog(@"The name is %@",title);
   NSLog(@"Using the Textfield: %@",[[alertView textFieldAtIndex:0] text]);
}

答案 1 :(得分:6)

在用户输入文本字段中的任何文本之前,

[alert show]会立即返回。通过设置delegate并实施alertView:clickedButtonAtIndex:(例如,还有其他几种可能性),您需要在警告被取消后获取文本。

答案 2 :(得分:2)

在iOS 8中,UIAlertview已被弃用。使用UIAlertController而不是。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Add Fruit" message:@"Type to add a fruit" preferredStyle:UIAlertControllerStyleAlert];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField){
    textField.placeholder = @"Fruit";
}];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK"
                                               style:UIAlertActionStyleDefault
                                             handler:^(UIAlertAction *action) {
                                                 UITextField *textFiel = [alert.textFields firstObject];
                                                 [fruits addObject:textFiel.text];
                                             }];
[alert addAction:okAction];

[self presentViewController:alert animated:YES completion:nil];

答案 3 :(得分:0)

您需要等待委托回调alertView:clickedButtonAtIndex 才能获取文字 - 保留对文字字段的引用并显示提醒,将其delegate设置为self。当调用该方法时,用户按下按钮表示他们已完成输入文本,因此现在可以安全地从文本字段中取出文本。