3

似乎缺少一些东西,但下面的代码正在为两者生成值nil(即使它正确启动了正确的警报类型并且不指示任何警告或错误)。这种实现可能有什么问题?titletitle1UIAlertView

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

4 回答 4

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]);
}
于 2013-04-23T14:15:22.353 回答
6

[alert show]在用户可以在文本字段中输入任何文本之前立即返回。您需要在警报被解除delegate通过设置和实施来获取文本alertView:clickedButtonAtIndex:(例如,还有其他几种可能性)。

于 2013-04-23T14:02:20.807 回答
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];
于 2015-11-10T05:14:23.537 回答
0

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

于 2013-04-23T14:08:07.597 回答