RGNPageMenu 1.0.2

RGNPageMenu 1.0.2

测试已测试
语言编程语言 SwiftSwift
许可证 MIT
发布上次发布2016年9月
SPM支持 SPM

Maintained by Kohei Iwasaki.



  • 作者
  • Iwark

RGNPageMenu.swift

RGNPageMenu 是一个易于定制的分页菜单控制器。

rgn-page-menu-sample-1

使用示例

以下来自 示例 项目。

  • 设置初始页面索引
  • 将非页面项目(如“添加页面按钮”)添加到菜单中。
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()
    }

}

运行时要求

  • iOS 8.0 或更高版本
  • Xcode 8.0 - Swift 3.0

贡献

请提交问题或提交拉取请求,以便看到您想看到的任何内容!我们正在等待! :)

许可证

RGNPageMenu 采用 MIT 许可证发布。