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