DLHamburguerMenu 是一个完全用 Swift 编写的“汉堡”侧边栏菜单控件。它在一个视图的当前视觉内容上方显示菜单(即:在当前 UINavigationController 上方)。它使用 storyboards 集成非常容易。
iOS 7+ 版本兼容
菜单通过设置主容器视图控制器,称为“根”视图,然后插入两个视图控制器(菜单视图控制器和内容视图控制器)来实现工作。第一个将包含侧边栏菜单,第二个将是应用程序的主要内容,可能是 UINavigationController 的子类。
为了方便,包含了一个名为 DLHamburguerNavigationController 的 UINavigationController 子类。因此,您只需在 storyboards 中设置三个视图控制器。
将 DLHamburguerContainerViewController.swift、DLHamburguerNavigationController.swift 和 DLHamburguerViewController.swift 文件拖放到您的项目中。设置一个至少包含三个视图控制器的故事板,根视图控制器(DLHamburguerViewController 的子类)、充当内容视图控制器的视图控制器(嵌入在 DLHamburguerNavigationController 中)以及菜单视图控制器。
这三个视图控制器不需要由任何 segue 相连接。还可以将任意数量的 segues 添加到内容视图控制器中。
然后,在根视图控制器中,在 awakeFromNib() 中实例化内容和菜单视图控制器。
override func awakeFromNib() {
self.contentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("DLDemoNavigationViewController") as UIViewController
self.menuViewController = self.storyboard?.instantiateViewControllerWithIdentifier("DLDemoMenuViewController") as UIViewController
}
要正确地从内容视图控制器中 segue,在菜单中,一旦您已经通过 push 或 show present 了另一个视图控制器,应更新内容视图控制器。在导航控制器的情况下,一旦进行 push,简单地将它分配为新的内容控制器即可。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let nvc = self.mainNavigationController()
if let hamburguerViewController = self.findHamburguerViewController() {
hamburguerViewController.hideMenuViewControllerWithCompletion({ () -> Void in
nvc.visibleViewController.performSegueWithIdentifier(self.segues[indexPath.row], sender: nil)
hamburguerViewController.contentViewController = nvc
})
}
}
可以使用 findHamburguerViewController() 函数检索当前汉堡视图控制器,以便您可以使用它访问其内容和菜单视图控制器。
汉堡菜单与iOS 7旋转和iOS 8过渡兼容。
由Ignacio Nieto Carvajal开发,灵感来自Roman Efimov的REFrostedViewController(《https://github.com/romaonthego/REFrostedViewController》)。
MIT授权(MIT)
版权所有 © 2015 Ignacio Nieto Carvajal
任何人可以免费获得本软件及其关联文档的副本(以下简称“软件”),无需任何限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或出售软件副本,并允许向软件提供者提供软件的人同样这样做,前提是符合以下条件
以上版权声明和本许可声明应包含在软件的任何副本或主要部分中。
该软件按“现状”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、适用于特定目的和不侵权的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他任何原因,源于、由、或与软件的使用或任何其他方式有关。