Objective C - 我希望 UIAlertController 在单击按钮时不被删除

Posted

技术标签:

【中文标题】Objective C - 我希望 UIAlertController 在单击按钮时不被删除【英文标题】:Objective C - I would like UIAlertController to not be removed when button clicked 【发布时间】:2018-05-03 15:01:54 【问题描述】:

我想展示一个带有 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) 被建议作为可能的答案,但问题涉及文本字段。我需要其中一个操作按钮在按下时不关闭警报。

【问题讨论】:

Prevent UIAlertController to dismiss的可能重复 请注意,直到警报已经解除,才会调用操作处理程序。 @Luda 最好使用自定义视图。不是警报控制器。 我的建议是创建一个类似于 UIAlertController 的原生视图的自定义视图,在警报解除后调用 UIAlertAction 的完成处理程序。希望有所帮助。 为什么在关闭后不再次显示警报? :D 【参考方案1】:

你不能这样做。

唯一的解决方案是创建一个看起来像原生 UIAlertController 的自定义视图控制器。

【讨论】:

【参考方案2】:

你不能用默认的UIAlertViewController来做这件事,如果你想这样做你需要创建看起来像UIAlertController的自定义视图控制器。 您可以使用此自定义视图控制器。

https://github.com/nealyoung/NYAlertViewController

【讨论】:

【参考方案3】:

从用户的角度来说,按下按钮而不执行操作会让我怀疑是否有什么东西坏了。如果您想借此机会获取更多信息或有关按钮按下意图的一些详细信息,我认为符合用户期望的解决方案(尽管可能有点烦人?)是简单地呈现第二个对话框第一个关闭后的框。基本上,“每个问题一个对话框”的处理方式。

否则,我会同意其他建议,并说您在这里需要自定义视图,而不是普通的 UIKit 解决方案。

【讨论】:

【参考方案4】:

试试这个代码。

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];

【讨论】:

【参考方案5】:

这段代码怎么样:

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 属性。它运作良好。

【讨论】:

以上是关于Objective C - 我希望 UIAlertController 在单击按钮时不被删除的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIAlert 指定大小

在 Objective C 中使用自动布局分离纵向和横向视图

更改表格视图中的单元格高度Objective C

KeyboardWillShowNotification 和 UIAlert

Objective C Animation 我想在屏幕上移动动画

定时 UIAlert 每 60 秒触发一次,无论我使用啥延迟