TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Sep 2016 |
SPMSupports SPM | ✗ |
Maintained by Kohei Iwasaki.
RGNPageMenu is easily customizable paging menu controller.
This is from Demo project.
import UIKit
class ViewController: UIViewController {
var titles = ["Python", "C++", "Ruby", "Swift", "Go", "Elixir"]
var viewControllers:[String:UIViewController] = [:]
var pageMenu: RGNPageMenu!
override func viewDidLoad() {
super.viewDidLoad()
let options:[RGNPageMenuOption] = [
.initialPageIndex(1),
.menuHeight(80.0),
.menuItemMargin(20.0),
.menuItemPadding(20.0)
]
self.pageMenu = RGNPageMenu(frame: self.view.frame, delegate: self, options: options)
self.view.addSubview(self.pageMenu.view)
self.pageMenu.menuScrollView.backgroundColor = UIColor(red: 250.0/255, green: 250.0/255, blue: 250.0/255, alpha: 1.0)
}
}
// MARK: - RGNPageMenuDelegate
extension ViewController: RGNPageMenuDelegate {
// Number of controllers
func rgnNumberOfControllers() -> Int {
return titles.count
}
// Controller at index
func rgnController(atIndex index: Int) -> UIViewController {
let t = titles[index]
if let vc = self.viewControllers[t] {
return vc
} else {
let vc = MyTableViewController()
vc.title = t
self.viewControllers[t] = vc
return vc
}
}
// Number of menu items
func rgnNumberOfMenuItems() -> Int {
return titles.count + 1
}
// Menu label at index
func rgnMenuLabel(atIndex index: Int) -> UILabel {
let label = UILabel()
if index == titles.count {
label.text = "Add Language"
} else {
label.text = titles[index]
}
label.font = UIFont.systemFont(ofSize: 13.0)
if index == self.pageMenu.currentPageIndex {
label.textColor = UIColor.white
label.backgroundColor = UIColor(red: 236.0/255, green: 109.0/255, blue: 109.0/255, alpha: 1.0)
label.layer.cornerRadius = 10.0
label.layer.masksToBounds = true
} else {
label.textColor = UIColor(red: 116.0/255, green: 116.0/255, blue: 116.0/255, alpha: 1.0)
}
label.textAlignment = NSTextAlignment.center
label.sizeToFit()
if label.frame.size.width < 44 {
label.frame.size.width = 44
}
label.frame.size.height += 8.0
return label
}
// Tap handler for menu items (optional)
func rgnMenuItemTapped(atIndex index: Int) {
if index == titles.count {
self.titles.append("New Language\(index)")
self.pageMenu.reloadData(resetPosition: true)
} else {
self.pageMenu.moveToPage(index)
}
}
// Page changed (optional)
func rgnDidMoveTo(pageIndex index: Int) {
let vc = self.rgnController(atIndex: index) as! MyTableViewController
vc.viewDidPresent()
}
}
Please file issues or submit pull requests for anything you’d like to see! We’re waiting! :)
RGNPageMenu is released under the MIT license.