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

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

依然是废话少说,先上图

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

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

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

分页导航指示器 CD_PageControl

CD_PageControl 非常简单的代码实现强大的功能

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 以获得相关数据服务

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

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

转载于:https://juejin.im/post/5cfe2de9f265da1b6028f830

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值