CD组件库系列:CD_Page 简单而强大的分页导航控制器

CD_Page 一个简单而强大的分页导航控制器

依然是废话少说,先上图

  • 部分调节功能
  • 布局排版模式

写一款广泛知足 95% 需求的分页控制器;以极少的学习成本进行扩展,以知足100%需求的分页控制器,拿来即用,剩余时间只需开心吃鸡😎!git

核心代码不足千行,有兴趣请移步github

分页导航指示器 CD_PageControl

CD_PageControl 很是简单的代码实现强大的功能bash

public class CD_PageControl<Item: CD_PageControlItemProtocol, Buoy:CD_PageControlBuoyProtocol>: UIView where Item: UIView, Buoy: UIView {
    ...
}
复制代码

CD_PageControl 包含两项内容:标签 Item 、浮漂 Buoy; Item 与 Buoy 均可以自定义,自定义的 Item、Buoy 分别遵循 CD_PageControlItemProtocol 、CD_PageControlBuoyProtocol 以得到相关数据服务app

CD_PageControl 能力在于导航标签与浮漂简单轻松的自定义、可实现市面上如:淘宝、京东、商品详情页、优酷、爱奇艺、今日头条、汽车之家.....你想实现的分页导航样式ide

lazy var pageControl: CD_PageControl = {
    return CD_PageControl<CD_PageControlItem,CD_PageControlBuoy>(itemConfig:CD_PageControlItem.Model(), buoyConfig: CD_PageControlBuoy.Model())
}()

pageControl.dataSource = (0..<3).map({ (i) -> CD_PageControlItemDataSource in
    var d = CD_PageControlItemDataSource()
    d.id = i.stringValue
    d.title = "Title-\(i)"
    return d
})
复制代码

分页控制器 CD_PageViewController / CD_PageView

CD_PageViewController / CD_PageView 数据源 dataSource 分别对应 UIViewController / UIView 基于 CD_Form 排版组件 遵循 CD_RowVCProtocol / CD_RowViewProtocol 协议,经过 CD_RowVC / CD_RowView 构建布局

public var dataSource:[CD_RowViewProtocol] = [] {
        didSet{
            updateViewControllers()
            reloadData()
        }
    }
复制代码
lazy var pageVC: CD_PageViewController = {
    return CD_PageViewController()
}()

pageVC.dataSource = [CD_RowVC<VC_PageA>(dataSource: "id", config: "config"),
                     CD_RowVC<VC_PageB>(),
                     CD_RowVC<VC_PageC>()]

pageVC.dataSource.append(CD_RowVC<VC_PageA>()) 

pageVC.dataSource += [CD_RowVC<VC_PageA>()]  

pageVC.selectIndex = 2
复制代码

子页面控制器 遵循 CD_UIViewControllerProtocol 得到数据服务学习

extension VC_PageA: CD_UIViewControllerProtocol {
    static func row_init(withDataSource dataSource: Any?, config: Any?, callBack: CD_RowCallBack?, tapBlock: CD_RowDidSelectBlock?) -> UIViewController {
        let vc = VC_PageA.show()
        vc.dataSource = dataSource
        vc.config = config
        return vc
    }
    typealias DataSource = Any
    typealias ConfigModel = Any
    var config: ConfigModel? {
        get { return nil }
        set {}
    }
    var dataSource: DataSource? {
        get { return nil }
        set {}
    }
}
复制代码

再增长 CD_PageCycleView,得到轮播图能力(暂不着急)

  • 由于有一款强大第三方库 友情连接 FSPagerView

---------- 敬请大佬指正 ----------

相关文章
相关标签/搜索