UIApplication.sharedApplication()。keyWindow?.rootViewController冻结我的应用程序

时间:2016-01-18 17:50:08

标签: ios uiviewcontroller uinavigationcontroller swift2

在我的应用程序中的某个时刻,我需要回到我的主(即主页)ViewController。因此,我需要向后移动到我的导航堆栈,现在已经完成了ViewControllers和NavigationControllers。所以我做了以下几点:

// to dismiss the current VC
self.navigationController?.popViewControllerAnimated(true)

// to go back home
UIApplication.sharedApplication().keyWindow?.rootViewController = homeNC

homeNC是一个全局变量,指向一个NavigationController,其中包含我的主要" home"的故事板实例。视图控制器。

它有效但部分有效。意思是,它确实将我带回了我的家ViewController,但它对触摸和滚动没有反应。没有任何响应,无论是navigationBar按钮还是家庭NC / VC中的TableViewCells。 Xcode没有崩溃,只是坐在那里等待。

我无法弄清楚原因。谁能想到我在这里失踪的东西?

** 编辑 **

也许是因为我在我的主(家)VC中嵌入了一个嵌套的VC。这是代码以及我尝试过的其他内容:

homeNC = self.navigationController!
homeVC = self

let discoverVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DiscoverVC") as UIViewController

// embed discoverVC in this VC
self.addChildViewController(discoverVC)
self.view.addSubview(discoverVC.view)
discoverVC.didMoveToParentViewController(self)

// store self NC for using it by "thank you" VC to come back to home after payment
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

// navigates back but becomes unresponsive
appDelegate.window?.rootViewController = homeVC

// navigates back but becomes unresponsive
appDelegate.window?.rootViewController = homeNC

我还尝试使用以下内容保存对appdelegate窗口的引用:

// Initialise sideMenu
window = UIWindow(frame: UIScreen.mainScreen().bounds)

let sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: MainViewController()), leftMenuViewController: LeftMenuViewController())

window!.rootViewController = sideMenu
window!.makeKeyAndVisible()

// get a reference to appdelegate's window so that we can navigate back later
mainWindow = window!

但是当我这样做时它又不会导航回来:

appDelegate.window?.rootViewController = mainWindow.rootViewController

1 个答案:

答案 0 :(得分:1)

试试这个。我会为你工作。

{1..10}
{1..10}
{1..10}
{1..10}

修改

我读出你编辑过的问题。由于 let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.window?.rootViewController = mainVC 问题正在发生。我更新了我的答案,我希望它现在适合你。你必须做两个改变。首先在SSASideMenu中,将AppDelegate.swift的属性设为这样:

SSASideMenu

现在您的代码将更改为:

var window: UIWindow?
var sideMenu: SSASideMenu!

现在,如果您想更改视图控制器,则必须更改sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: MainViewController()), leftMenuViewController: LeftMenuViewController()) contentViewController,如下所示:

SSASideMenu