从已关闭的视图控制器中显示警报

Posted

技术标签:

【中文标题】从已关闭的视图控制器中显示警报【英文标题】:Presenting an alert from a view controller that has closed 【发布时间】:2017-07-27 23:06:45 【问题描述】:

我有一个 ios Objective-C 应用程序,我试图从正在关闭的 UIViewController 中显示 UIAlertController。我已经尝试在AppDelegate 中添加这个常见的解决方法:

- (UIViewController *)currentTopViewController

   UIViewController *topVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
   while (topVC.presentedViewController)
   
     topVC = topVC.presentedViewController;
   
  return topVC;

调用:

[appDelegate.currentTopViewController presentViewController:alert animated:YES completion:nil];

但是这个错误仍然出现:

Warning: Attempt to present UIAlertController on MyViewController whose view is not in the window hierarchy!

谁能给点建议?

【问题讨论】:

您应该向父视图控制器发送通知(或使用委托等)并从那里呈现 @nathan 你能提供一个使用通知的例子吗? 委托示例:***.com/a/33229483/2124535,NotificationCenter 示例:***.com/a/29738348/2124535 【参考方案1】:

如果您想在关闭视图控制器时显示警报,那么您可以使用完成块实现解除并在那里显示它。例如:

[self dismissViewControllerAnimated:YES completion:^(void) 
  // UIAlertController code here

];

【讨论】:

【参考方案2】:

您可以将 UIWindow 与透明的 UIViewController 一起使用,然后在其上显示 UIAlertController。 下面的链接提供了 UIAlertController 上的一个类别,该类别在 Objective-C 中有一个 show 方法。你可以使用它。

链接:https://***.com/questions/26554894/how-to-present-uialertcontroller-when-not-in-a-view-controller

【讨论】:

以上是关于从已关闭的视图控制器中显示警报的主要内容,如果未能解决你的问题,请参考以下文章

关闭自定义警报视图并解除 segue 问题?

Swift - 关闭警报消息关闭视图控制器

关闭对象引用不可用的控制器或应用程序的警报视图..!

在主视图控制器中显示警报视图(从子类调用)

如何调用我的自定义警报控制器功能以显示在其他视图控制器中?

如何从已解散的导航控制器中的文本视图中捕获最终值