swift 3 present from appdelegate 错误:警告:尝试显示〜其视图不在窗口层次结构中

Posted

技术标签:

【中文标题】swift 3 present from appdelegate 错误:警告:尝试显示〜其视图不在窗口层次结构中【英文标题】:swift3 present from appdelegate error : Warning: Attemp to present ~ whose view is not in the window hierarchy 【发布时间】:2017-04-24 10:23:13 【问题描述】:

swift3、xcode8 ios

我正在创建一个应用程序,该应用程序调用小部件上的按钮以在应用程序中显示特定页面

比如一个app由viewA和viewB组成,第一个view是viewA 当我按下小部件中的按钮时,我试图显示 viewB。

来源


let mainStoryboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
let DetailView: Detail_Update_View = mainStoryboard.instantiateViewController(withIdentifier: "Detail_Update_View") as! Detail_Update_View

let nav2 = UINavigationController.init (rootViewController: DetailView)
self.window?.rootViewController? .present (nav2, animated: true, completion: nil)

这是从 AppDelegate 中的 func open url 调用的。

当您单击小部件中的按钮时,最初会调用 viewB。 再次打开小部件并按下按钮 页面会被调用,但信息不会改变,会显示如下错误

错误消息


Warning: Attempt to present <UINavigationController: 0x101a1b600> on <SWRevealViewController: 0x101820c00> whose view is not the window hierarchy!

如果您第一次调用小部件,请关闭 viewB 屏幕(转到 viewA)并单击小部件中的按钮以使其工作。

请帮帮我..

【问题讨论】:

那么你需要在storyboard中设置初始viewcontroller。 试试这个:***.com/a/40304837/3901620 @KKRocks 感谢您的回复。它看起来像工作!但是.. 如果我尝试 3 次,我必须按 3 次后退按钮返回每个页面。有什么方法可以一次去viewA吗? 输入如何从控制器返回的代码? @KKRocks 实际上,有两种方法.. 其中一种是 navigationController.popViewController 和其他薄是驳回 【参考方案1】:
  let mainStoryboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
  let DetailView: Detail_Update_View = mainStoryboard.instantiateViewController(withIdentifier: "Detail_Update_View") as! Detail_Update_View

  let nav2 = UINavigationController.init (rootViewController: DetailView)
  let appDelegate = UIApplication.shared.delegate as! AppDelegate

  appDelegate.window?.rootViewController?.present (nav2, animated: true, completion: nil)

【讨论】:

感谢您的回答。但它是一样的......你的第一个答案是运作良好。但是有一个问题无法返回viewA 如果你为推送视图控制器制作导航控制器而不是只有你可以弹出它是预设视图控制器你只能关闭它 对不起..我听不懂你的意思...我该怎么办? 如果你想返回而不是应该让导航推送视图控制器在上面的代码 presenview 控制器正在使用的其他方面,你只能关闭。

以上是关于swift 3 present from appdelegate 错误:警告:尝试显示〜其视图不在窗口层次结构中的主要内容,如果未能解决你的问题,请参考以下文章

来自 UITableView 的 Swift Presenting popover 运行速度非常慢

在swift中使用present时如何阻止ViewController闪烁

Swift/iOS13 - UIApplication.shared.delegate.window?.rootViewController?.present() 来自自定义类

swift 使用segue从controller-presenter获取数据

B. Present from Lena1000 / 找规律

ios swift 判断uiviewcontroller时push present 进来的 还是pop进来的