关闭由模态视图控制器呈现的 UIAlertController

Posted

技术标签:

【中文标题】关闭由模态视图控制器呈现的 UIAlertController【英文标题】:dismiss UIAlertController presented by a modal view controller 【发布时间】:2014-11-20 16:20:45 【问题描述】:

我似乎遇到了一个类似于未解决的已发布问题中的问题:UIAlertController dismissing his presentingViewController

我在普通 UIViewController 之上展示了一个模态视图控制器。然后我在那个模态视图控制器上弹出一个警报。当我按下“ok”以解除警报(使用下面的代码生成)时,模态视图控制器也被解除。

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK"
                                             style:UIAlertActionStyleDefault 
                                           handler:^(UIAlertAction *action 
                                                    [self dismissViewControllerAnimated: YES completion: nil];];

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign up problem."
                                                               message:@"Some fields are empty. Please check your inputs and try again."
                                                        preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:ok];
[self presentViewController:alert animated:YES completion:nil];

我怎样才能只关闭警报?

我意识到我可以通过使用导航控制器类型设置并隐藏导航栏来避免此问题,因此我获得与模态视图控制器相同的感觉,但这似乎很愚蠢。谢谢。

【问题讨论】:

【参考方案1】:

不要在按钮处理程序中调用self dismissViewController。这明确说明您希望视图控制器被解除。

您无需关闭警报。它会自动关闭自己。您应该在按钮处理程序中做的唯一一件事就是执行您需要的任何操作。如果你不需要做任何事情,就什么都不做。

如果您的警报只是一条消息并且您不需要执行任何操作,只需执行以下操作:

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];

【讨论】:

谢谢。非常感谢,实际上这两种行为都很有用。【参考方案2】:

您无需在按钮处理程序中以任何方式手动关闭或删除 UIAlertController - 它自己会这样做。

只需删除对dismissViewControllerAnimated:completion: 的调用即可。

【讨论】:

但是,如果您出于特定原因确实想要这样做怎么办。必须有一种方法可以以编程方式解除它。例如,对于较旧的 UIAlertView,您可以通过编程方式关闭/隐藏它。 @Supertechnoboff:我想你可以[self dismissViewControllerAnimated:completion:]。不过不确定。

以上是关于关闭由模态视图控制器呈现的 UIAlertController的主要内容,如果未能解决你的问题,请参考以下文章

关闭当前的模态视图控制器,然后呈现新的模态视图控制器

视图控制器以模态方式呈现/关闭时的通知?

将模态呈现的视图控制器关闭到不同的底层视图控制器

关闭模态视图控制器后呈现不同的视图控制器

通过模态视图呈现详细视图控制器 [关闭]

关闭模态呈现的视图控制器后切换标签栏控制器视图控制器