似乎缺少某些内容,但以下代码为nil
和title
生成了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]);
答案 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
。当调用该方法时,用户按下按钮表示他们已完成输入文本,因此现在可以安全地从文本字段中取出文本。