目标C - 我想在单击按钮时不删除UIAlertController

时间:2018-05-03 15:01:55

标签: ios objective-c uialertcontroller uialertaction

我想提供一个带有2个按钮的UIAlertController。

一个按钮应该关闭警报,第二个按钮应该执行操作但在屏幕上保持警报。是否有一些可以执行的配置,它不会关闭警报?

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title"
                                                               message:@"message"
                                                        preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"Do Something"
                                          style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action) {
    //Pressing this button, should not remove alert from screen
                                        }]];

[alert addAction:[UIAlertAction actionWithTitle:@"Close"
                                          style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action) {
    //Regular functionality- pressing removes alert from screen 
                                        }]];


[alert show];

这个(Prevent UIAlertController to dismiss)被建议作为可能的答案,但问题涉及文本字段。我需要其中一个操作按钮,以便在按下时不关闭警报。

5 个答案:

答案 0 :(得分:6)

你不能这样做。

只有一种解决方案是创建一个看起来像本机UIAlertController的自定义视图控制器。

答案 1 :(得分:3)

您无法使用默认UIAlertViewController执行此操作,如果您要执行此操作,则需要创建类似UIAlertController的自定义视图控制器。
您可以使用此自定义视图控制器。

https://github.com/nealyoung/NYAlertViewController

答案 2 :(得分:1)

从用户的角度来看,没有按行动的按钮按下会让我想知道是否有什么东西被打破了。如果您试图将此作为获取更多信息的机会,或者按钮按下意图的一些细节,我认为一个符合用户期望的解决方案(虽然可能有点烦人?)就是简单地呈现第二个对话框关闭第一个后的框。基本上,一个“按对话框一对话”的方式处理它。

否则,我会同意其他建议,并说你需要一个自定义视图,而不是UIKit股票解决方案。

答案 3 :(得分:1)

试试这段代码。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title"
                                                               message:@"message"
                                                        preferredStyle:UIAlertControllerStyleAlert];

[alert addAction:[UIAlertAction actionWithTitle:@"Do Something"
                                          style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action) {

                                            NSLog(@"Do Something Tapped");
                                        }]];

[alert addAction:[UIAlertAction actionWithTitle:@"Close"
                                          style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action) {
                                            NSLog(@"Close Tapped");
                                        }]];


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

答案 4 :(得分:0)

这段代码怎么样:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title"
                                                               message:@"message"
                                                        preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *doSomethingAction = [UIAlertAction actionWithTitle:@"Do Something"
                                                     style:UIAlertActionStyleDefault
                                                   handler:nil];
doSomethingAction.enabled = NO;
[alert addAction:doSomethingAction];

[alert addAction:[UIAlertAction actionWithTitle:@"Close"
                                          style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action) {
                                            //Regular functionality- pressing removes alert from screen
                                        }]];
[self presentViewController:alert animated:true completion:nil];

NO设置为UIAlertAction的enabled属性。它运作良好。