当前位置 : 主页 > 手机开发 > ios >

ios – 有没有办法在不弄乱AppDelegate窗口的情况下查看另一个UIViewController后面的

来源:互联网 收集:自由互联 发布时间:2021-06-11
有一个我非常喜欢的图书馆,你可以在这里找到( https://github.com/pixyzehn/MediumMenu). 基本上它执行以下操作: 后面的菜单实际上是一个UIViewController.如果我们深入研究源代码,我们将找到以下
有一个我非常喜欢的图书馆,你可以在这里找到( https://github.com/pixyzehn/MediumMenu).

基本上它执行以下操作:

MediumMenu Demo

后面的菜单实际上是一个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().委托?.window ??是这个库工作的关键,但它们也限制了库.

根据这些行,我们正在制作UIViewController,我们希望菜单为rootViewController,然后我们将菜单视图添加到0索引的窗口(我猜这是将它放在后面,后面contentController).

图书馆的问题:

只有在初始视图控制器上需要菜单时,该库才有效.从某种意义上说,只有contentController已经是rootViewController.它实际上对我来说在我的应用程序中起作用,但是我不能再回到我原来的UIViewController,因为它不再在层次结构中了.

我有一个场景,我有一个登录视图控制器,当你成功登录时,我将你转到我想要菜单的UINavigationController.问题的第一个明显标志是我收到投诉“警告:尝试在LoginViewController上呈现UINavigationController,其视图不在窗口层次结构中!”显然,它不在窗口层次结构中,因为我正在重新分配rootViewController.

我不知道如何解决这个问题.当UIViewController我希望菜单不是初始视图控制器时,有没有办法让这个功能工作?

简短的回答是:是的.

这可以通过将UIViewControllerTransitioningDelegate分配给包含list-menu的ViewController并实现interactionControllerForPresentation()和interactionControllerForDismissal()方法来实现.您不必直接触摸UIWindow.

您可以只更改现有库的这一部分,但从它的外观来看,它只是一个带有奇特过渡的TableView.你可以自己轻松实现这一点.

查看Apple的API Reference在交互式过渡和this tutorial由Ray Wenderlich进行示例.

网友评论