有一个我真正喜欢的图书馆,你可以在这里找到(https://github.com/pixyzehn/MediumMenu)。有没有办法查看另一个UIViewController后面的UIViewController而不会搞乱AppDelegate窗口?
本质上,它具有以下功能:
在后面的菜单实际上是一个UIViewController。如果我们深入到源代码,我们会发现下面的非常重要的代码:
public init(items: [MediumMenuItem], forViewController: UIViewController) {
self.init()
self.items = items
height = screenHeight - 80 // auto-calculate initial height based on screen size
frame = CGRect(x: 0, y: 0, width: screenWidth, height: height)
contentController = forViewController
menuContentTableView = UITableView(frame: frame)
menuContentTableView?.delegate = self
menuContentTableView?.dataSource = self
menuContentTableView?.showsVerticalScrollIndicator = false
menuContentTableView?.separatorColor = UIColor.clearColor()
menuContentTableView?.backgroundColor = menuBackgroundColor
addSubview(menuContentTableView!)
if panGestureEnable {
let pan = UIPanGestureRecognizer(target: self, action: #selector(MediumMenu.didPan(_:)))
contentController?.view.addGestureRecognizer(pan)
}
let menuController = UIViewController()
menuController.view = self
UIApplication.sharedApplication().delegate?.window??.rootViewController = contentController
UIApplication.sharedApplication().delegate?.window??.insertSubview(menuController.view, atIndex: 0)
}
前几行是不是真的很重要,但最后行(那些对付UIApplication.sharedApplication().delegate?.window??
是关键到这个库工作,但他们也限制了库。
根据这些行,我们使UIViewController,我们希望菜单为rootViewController
,然后我们将菜单视图添加到0指数(我猜这是什么把它放在后面,在contentController
之后)
库存问题:
只有当您需要初始视图控制器上的菜单时,该库才有效。从某种意义上说,只有contentController已经是rootViewController。它实际上会在我的应用程序中为我运行,但是我不能继续回到我的原始UIViewController,因为它不再处于层次结构中。
我有一个场景,我有一个登录视图控制器,并且当您成功登录时,我会将您添加到我想要的菜单的UINavigationController中。问题的第一个明确标志是我收到投诉“警告:尝试在其视图不在窗口层次结构中的LoginViewController上呈现UINavigationController!”显然,它不在窗口层次结构中,因为我正在重新分配rootViewController。
我不知道如何解决这个问题。有没有办法让这个功能工作时,UIViewController我想菜单上不是初始视图控制器?
你最初的'UIViewController'是'UINavigationController'吗? –