2017-09-23 77 views
0

我试图在导航控制器中嵌入的ViewController之上呈现嵌入NavigationController中的tableViewController。尝试在导航控制器之上呈现导航控制器“其视图不在窗口层次结构中”

I keep getting the error: that the view controller cannot be presented because it is not in the window hierarchy.

总之,我想允许用户点击the number of likes上后,然后被引导至NavigationController嵌入式TableViewController和它不工作。

由于某种原因,当它从标签栏控制器呈现时工作,当我尝试点击类似的数字,但不是当我从导航控制器执行它时。对于点击等等数如下,位于集合视图中的细胞迅速的文件的操作代码:

@IBAction func LikeNumber_tapped(_ sender: Any) { 
     let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LikedByVC2") as? UINavigationController 
     let tableVC = vc?.viewControllers.first as! LikedByTableViewController 
     tableVC.postKey = self.postKey 
     self.window?.rootViewController?.present(vc!, animated: true, completion: nil) 

    } 

是否有可能做什么我试图?我试图让问题尽可能简单,但让我知道是否需要详细说明。提前致谢。

+0

为什么要那样做?为什么不''self.navigationController?.pushViewController(vc,animated:false)'?或者为什么不直接使用segue? – Paulw11

+0

@ Paulw11我无法使用push,因为“self”是一个collectionviewcell,所以我仅限于显示另一个视图控制器的选项。而且我不确定segue如何帮助我显示视图控制器。 – dombad

+0

好的,如果'self'是一个单元格,那么你应该使用委托和按钮点击事件到正确的视图控制器,以便它可以被处理。基本方法[这里](https://stackoverflow.com/questions/28659845/swift-how-to-get-the-indexpath-row-when-a-button-in-a-cell-is-taped/38941510# 38941510)。显示视图控制器是segues所做的。 – Paulw11

回答

0

一个解决办法是,以取代本的最后一行:

UIApplication.shared.keyWindow?.rootViewController?.present(vc!, animated: true, completion: nil) 

欲了解更多信息和各种解决方案,你也可以检查此thread

+0

我仍然得到相同的错误。它表示如下:“警告:试图在上呈现,其视图不在窗口层次结构中!”它必须与从tabbarcontroller到导航控制器的事实有关,然后我想要展示的应该是通过该导航控制器,但试图在tabbarcontroller上展示自己。这是我遇到的问题。 – dombad

相关问题