带有 UITextfield 的 UIAlertController 不显示标题和消息
UIAlertController with UITextfield does not display Title and Message
请帮我解决以下问题。
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
UITextField *txtValue = alertController.textFields.firstObject;
toCollect = [txtValue.text floatValue];
}]];
[self presentViewController:alertController animated:YES completion:nil];
我使用了上面的代码,但它在下面的屏幕截图中显示了结果。无法显示标题和消息
提前致谢!
坦率地说,您的代码运行良好。只是预感,尝试添加 [self presentViewController:alertController animated:YES completion:nil];
主队列中的这段代码。
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alertController animated:YES completion:nil];
});
我稍微修改了你的代码,它对我有用。基本上,我使用 "show" 控制器而不是 "present"。
这是截图:
-(IBAction)pressMe:(id)sender {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
UITextField *txtValue = alertController.textFields.firstObject;
NSString *string = txtValue.text;
NSLog(@"String: %@", string);
}]];
[self showViewController:alertController sender:nil]
}
试试这个代码。
if ([UIAlertController class])
{
// use UIAlertController
UIAlertController *alert= [UIAlertController
alertControllerWithTitle:@"Enter Folder Name"
message:@"Keep it short and sweet"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action){
//Do Some action here
UITextField *textField = alert.textFields[0];
NSLog(@"text was %@", textField.text);
}];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
NSLog(@"cancel btn");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[alert addAction:cancel];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"folder name";
textField.keyboardType = UIKeyboardTypeDefault;
}];
[self presentViewController:alert animated:YES completion:nil];
}
这里是创建UIAlertController
显示消息和标题的代码。
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"Alert Controller"
message:@"Alert Message"
preferredStyle:UIAlertControllerStyleAlert];
UIViewController *viewController = [[UIViewController alloc]init];
[viewController.view setBackgroundColor:[UIColor blueColor]];
UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(10, 8, 250, 30)];
lbl.text = @"This is a label";
lbl.textAlignment = NSTextAlignmentCenter;
lbl.textColor = [UIColor whiteColor];
[viewController.view addSubview:lbl];
UITextField *tf = [[UITextField alloc]initWithFrame:CGRectMake(10, 35, 250, 30)];
tf.borderStyle = UITextBorderStyleRoundedRect;
tf.placeholder = @"Enter your name";
[viewController.view addSubview:tf];
[alertController setValue:viewController forKey:@"contentViewController"];
UIAlertAction *cancelAction = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action)
{
NSLog(@"Cancel action");
}];
UIAlertAction *okAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
{
NSLog(@"OK action");
NSLog(@"Text Value : %@",tf.text);
}];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alertController animated:YES completion:nil];
});
对于 swift 你可以像下面的代码一样做同样的事情:
let alert = UIAlertController(title: "Alert Controller", message: "Alert Message", preferredStyle: UIAlertControllerStyle.Alert)
let cancelAction = UIAlertAction(
title: "Cancel",
style: UIAlertActionStyle.Destructive) { (action) in
}
let confirmAction = UIAlertAction(
title: "OK", style: UIAlertActionStyle.Default) { (action) in
}
alert.addAction(confirmAction)
alert.addAction(cancelAction)
let VC = UIViewController()
VC.view.backgroundColor = UIColor.blackColor()
let lbl = UILabel()
lbl.frame = CGRectMake(10, 8, 250, 30)
lbl.text = "this is a label"
lbl.textAlignment = NSTextAlignment.Center
lbl.textColor = UIColor.whiteColor()
VC.view .addSubview(lbl)
let txt = UITextField()
txt.frame = CGRectMake(10, 35, 250, 30)
txt.borderStyle = UITextBorderStyle.RoundedRect
txt.placeholder = "enter text"
VC.view .addSubview(txt)
alert.setValue(VC, forKey: "contentViewController")
self.presentViewController(alert, animated: true, completion: nil)
从 Github 下载演示:https://github.com/nitingohel/NGAlertViewController-Swift2.0
我测试了你发布在此处的代码,它在所有模拟器以及 iOS 8.0+ 中的设备中都可以正常工作,或者如果你想在 ios 7.0 中测试它,那么你必须使用 UIAlertview。
代码是:查看controller.m
@interface ViewController ()
{
float toCollect;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(IBAction)btntapped:(id)sender
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
UITextField *txtValue = alertController.textFields.firstObject;
toCollect = [txtValue.text floatValue];
}]];
[self presentViewController:alertController animated:YES completion:nil];
}
@end
输出快照:
请帮我解决以下问题。
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
UITextField *txtValue = alertController.textFields.firstObject;
toCollect = [txtValue.text floatValue];
}]];
[self presentViewController:alertController animated:YES completion:nil];
我使用了上面的代码,但它在下面的屏幕截图中显示了结果。无法显示标题和消息
提前致谢!
坦率地说,您的代码运行良好。只是预感,尝试添加 [self presentViewController:alertController animated:YES completion:nil];
主队列中的这段代码。
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alertController animated:YES completion:nil];
});
我稍微修改了你的代码,它对我有用。基本上,我使用 "show" 控制器而不是 "present"。
这是截图:
-(IBAction)pressMe:(id)sender {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
UITextField *txtValue = alertController.textFields.firstObject;
NSString *string = txtValue.text;
NSLog(@"String: %@", string);
}]];
[self showViewController:alertController sender:nil]
}
试试这个代码。
if ([UIAlertController class])
{
// use UIAlertController
UIAlertController *alert= [UIAlertController
alertControllerWithTitle:@"Enter Folder Name"
message:@"Keep it short and sweet"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action){
//Do Some action here
UITextField *textField = alert.textFields[0];
NSLog(@"text was %@", textField.text);
}];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
NSLog(@"cancel btn");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[alert addAction:cancel];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"folder name";
textField.keyboardType = UIKeyboardTypeDefault;
}];
[self presentViewController:alert animated:YES completion:nil];
}
这里是创建UIAlertController
显示消息和标题的代码。
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"Alert Controller"
message:@"Alert Message"
preferredStyle:UIAlertControllerStyleAlert];
UIViewController *viewController = [[UIViewController alloc]init];
[viewController.view setBackgroundColor:[UIColor blueColor]];
UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(10, 8, 250, 30)];
lbl.text = @"This is a label";
lbl.textAlignment = NSTextAlignmentCenter;
lbl.textColor = [UIColor whiteColor];
[viewController.view addSubview:lbl];
UITextField *tf = [[UITextField alloc]initWithFrame:CGRectMake(10, 35, 250, 30)];
tf.borderStyle = UITextBorderStyleRoundedRect;
tf.placeholder = @"Enter your name";
[viewController.view addSubview:tf];
[alertController setValue:viewController forKey:@"contentViewController"];
UIAlertAction *cancelAction = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action)
{
NSLog(@"Cancel action");
}];
UIAlertAction *okAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
{
NSLog(@"OK action");
NSLog(@"Text Value : %@",tf.text);
}];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alertController animated:YES completion:nil];
});
对于 swift 你可以像下面的代码一样做同样的事情:
let alert = UIAlertController(title: "Alert Controller", message: "Alert Message", preferredStyle: UIAlertControllerStyle.Alert)
let cancelAction = UIAlertAction(
title: "Cancel",
style: UIAlertActionStyle.Destructive) { (action) in
}
let confirmAction = UIAlertAction(
title: "OK", style: UIAlertActionStyle.Default) { (action) in
}
alert.addAction(confirmAction)
alert.addAction(cancelAction)
let VC = UIViewController()
VC.view.backgroundColor = UIColor.blackColor()
let lbl = UILabel()
lbl.frame = CGRectMake(10, 8, 250, 30)
lbl.text = "this is a label"
lbl.textAlignment = NSTextAlignment.Center
lbl.textColor = UIColor.whiteColor()
VC.view .addSubview(lbl)
let txt = UITextField()
txt.frame = CGRectMake(10, 35, 250, 30)
txt.borderStyle = UITextBorderStyle.RoundedRect
txt.placeholder = "enter text"
VC.view .addSubview(txt)
alert.setValue(VC, forKey: "contentViewController")
self.presentViewController(alert, animated: true, completion: nil)
从 Github 下载演示:https://github.com/nitingohel/NGAlertViewController-Swift2.0
我测试了你发布在此处的代码,它在所有模拟器以及 iOS 8.0+ 中的设备中都可以正常工作,或者如果你想在 ios 7.0 中测试它,那么你必须使用 UIAlertview。
代码是:查看controller.m
@interface ViewController ()
{
float toCollect;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(IBAction)btntapped:(id)sender
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Check" message:@"What was the value collected?" preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField)
{
textField.keyboardType = UIKeyboardTypeNumberPad;
textField.placeholder = @"What was the value collected?";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"Submit" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
UITextField *txtValue = alertController.textFields.firstObject;
toCollect = [txtValue.text floatValue];
}]];
[self presentViewController:alertController animated:YES completion:nil];
}
@end
输出快照: