测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年11月 |
SwiftSwift版本 | 4 |
SPM支持SPM | ✗ |
由 Leonardo Armero Barbosa 维护。
简单的左侧菜单。只需创建您的自定义视图并放入其中。
要求
安装CocoaPods,如果尚未安装
$ [sudo] gem install cocoapods
$ pod setup
转到Xcode项目的目录,创建并编辑Podfile,并添加LabMenu
$ cd /path/to/MyProject
$ nano Podfile
platform :ios, '11.0'
use_frameworks!
target 'MyProject' do
pod 'LABMenu', :git => 'https://github.com/xrax/LABMenu.git'
end
将其安装在您的项目中
$ pod install
从.xcworkspace文件打开您的项目(不要使用常规的项目文件)
$ open MyProject.xcworkspace
现在您可以在文件中导入LABMenu框架。
为了使用此pods,您需要了解一下。
您需要一个ViewController作为容器,其中包含所有这些pods的工作。
此容器需要一些东西才能工作
(* 继承自LABMenuViewController。
* 在调用super.viewDidLoad()之前设置menuView属性。
* 创建一个自定义菜单继承自LABMenuContainer。
* 通过调用menuView.setContentView(contentView:)函数设置您的自定义菜单为contentView。
* 使用UIBarButtonItem或仅使用图像设置您的自定义菜单按钮。
*(可选)使用UIBarButtonItem设置您的自定义后退按钮。如果您没有,将显示默认的"<"。
使用pushViewController()函数在容器ViewController中推送您的viewControllers。
从这个点开始,LABMenu内的所有viewControllers都在一个"internalNavigationController"内部,但所有在LABMenu之外的viewControllers都在与您的容器ViewController相同的navigationController中。
例如,viewControllers层次结构应该看起来像:
该项目有4个屏幕:Launcher、Login、Home和Profile。只有Home和Profile在容器中。
创建您自定义的菜单视图。例如(从xib加载)
为您的菜单创建一个swift文件。从"LABMenuContainer"继承。将文件所有者类设置为该菜单类。
实现所需的init和重写'init(delegate: LABMenuContainerDelegate)'。在重写的init中调用'super.init(delegate:)'并使用'Bundle.main.loadNibNamed'函数调用您的xib。设置根视图并实现菜单中所需的所有方面和功能。
import UIKit
import LABMenu
class MyMenu: LABMenuContainer {
fileprivate let sections: [String] = ["Main", "Options"]
fileprivate let items: [[String]] = [["Home", "Profile"], ["Settings", "Options"]]
@IBOutlet var view: UIView!
@IBOutlet weak var icUser: UIImageView!
@IBOutlet weak var icUserName: UILabel!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(delegate: LABMenuContainerDelegate) {
super.init(menuProportionalWidth: 0.8, delegate: delegate)
Bundle.main.loadNibNamed("MyMenu",
owner: self,
options: nil)
self.view!.frame = CGRect(origin: CGPoint.zero,
size: frame.size)
self.addSubview(self.view!)
self.delegate = delegate
}
@IBAction func closeSession(_ sender: Any) {
NSLog("Session closed")
}
}
extension MyMenu: UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items[section].count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section]
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default,
reuseIdentifier: nil)
cell.textLabel!.text = items[indexPath.section][indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
delegate.selectItemAt(indexPath: indexPath)
}
}
注意在super.init调用中有一个menuProportionalWidth参数,它允许的值在0到1之间。该值应在以下LABMenuViewController构造函数中设置。
在您的Storyboard中,将“ContainerViewController”嵌入到NavigationController中,并创建所需的所有视图控制器。
然后从'LABMenuViewController'继承“ContainerViewController”,并重写viewDidLoad。您可以调用super.viewDidLoad()之前设置所有LABMenuController属性。
class ViewController: LABMenuViewController {
override func viewDidLoad() {
// menuView properties
barColor = .lightGray
barTintColor = .white
menuProportionalWidth = 0.8
hideMenuButtonWhenShow = true
backPosition = .left
super.viewDidLoad()
}
}
在viewDidLoad函数中您必须设置您的Menu类
override func viewDidLoad() {
// menuView properties
barColor = .lightGray
barTintColor = .white
menuProportionalWidth = 0.8
hideMenuButtonWhenShow = true
backPosition = .left
super.viewDidLoad()
menuView.setContentView(contentView: MyMenu(delegate: self))
// Just set the image in the Menu BarButtonItem
setMenuButton(image: #imageLiteral(resourceName: "icMenu"))
// Or this to set a customized BarButtonItem
setMenuButton(button: UIBarButtonItem(customView: myCustomizedView))
// You can set the image in the BackButton else it show a simple '<'
setBackButton(button: #imageLiteral(resourceName: "icBackButton"))
let homeViewController = self.storyboard!.instantiateViewController(withIdentifier: "HomeViewController")
self.pushViewController(homeViewController,
animated: true)
}
我们欢迎所有贡献。请联系我们。
Leonardo Armero Barbosa
MIT许可
版权(c)2017 Leonardo Armero Barbosa
特此授予任何人,免费,以任何方式复制或分发此软件及其相关文档文件(“软件”),用于软件的任何处理,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售拷贝的软件,并允许获得软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
版权所有 (C) 2017 Leonardo Armero Barbosa
特此授予任何人,免费,以任何方式复制或分发此软件及其相关文档文件(“软件”),用于软件的任何处理,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售拷贝的软件,并允许获得软件的人这样做,前提是遵守以下条件
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。
本软件按“原样”提供,没有任何形式的明示或暗示的保证,包括但不仅限于适用性、针对特定目的的适宜性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他责任,是否因软件或使用或其它方式使用软件而引起,或与之相关。