Swift版ViewPager之Tabman 简单使用

前言:

Android上的ViewPager/ViewPager2为同级多页面切换带来了很好的体验。iOS系统中并没有提供类似的原生控件,如果要使用UIPagerViewController等进行自定义封装对于初学者而言难度则过高。这里uias提供了开源组件Tabman,其具有易理解、上手快等优点。鉴于网络上并没有几篇文章关于该组件的(也有寥寥几篇,质量实在难以恭维)介绍说明,本文将浅显地介绍其使用步骤。

使用步骤:

1:导入依赖

采用SPM的直接选择File->Swift Packages-> Add Package Dependency,键入如下内容一直Next即可

https://github.com/uias/Tabman

2:源码

这里写的有注释,有阅读基础的可直接看完,没有的看下面步骤也行:

import UIKit
import Tabman
import Pageboy

class ViewController: TabmanViewController, PageboyViewControllerDataSource, TMBarDataSource{
    
    // Return ViewControllers's count.
    func numberOfViewControllers(in pageboyViewController: PageboyViewController) -> Int {
        return viewControllers.count
    }

    // Return current index ViewController.
    func viewController(for pageboyViewController: PageboyViewController,
                        at index: PageboyViewController.PageIndex) -> UIViewController? {
        return viewControllers[index]
    }

    // Set default page.
    func defaultPage(for pageboyViewController: PageboyViewController) -> PageboyViewController.Page? {
        return nil
    }

    // Set BarItem's title.
    func barItem(for bar: TMBar, at index: Int) -> TMBarItemable {
        let title = "Page \(index)"
        return TMBarItem(title: title)
    }
    
    // Set ViewController's instance count.
    private var viewControllers = [YViewController(),EViewController(),SViewController()]

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set data source with self.
        self.dataSource = self

        // Create bar and set style.
        let bar = TMBar.TabBar()
        bar.layout.transitionStyle = .snap
        
        // Add to view
        addBar(bar, dataSource: self, at: .top)
    }
    
}


3:继承,实现代理

正如上文代码所展示而言,首先我们创建的ViewController要继承于TabmanViewController,然后实现PageboyViewControllerDataSource, TMBarDataSource这两个代理。实现完后系统会报错,点击修复即可,会出现如下几个方法:

  • func numberOfViewControllers(in pageboyViewController: PageboyViewController) -> Int {}:返回视图控制器的数量,也就是页面的数量;
  • func viewController(for pageboyViewController: PageboyViewController, at index: PageboyViewController.PageIndex) -> UIViewController? {}:返回当前视图控制器的索引,也就是当前位于第几个页面;
  • func defaultPage(for pageboyViewController: PageboyViewController) -> PageboyViewController.Page? {}:设置默认页面,如果为nil,则默认返回数据源的第一个数据;
  • func barItem(for bar: TMBar, at index: Int) -> TMBarItemable {}:设置标题栏。

4:设置视图控制器实例源

这里用数组即可。

private var viewControllers = [YViewController(),EViewController(),SViewController()]

如上文所示,我采用的是YViewController(),EViewController(),SViewController(),这三个自定义视图控制器,并分别设置其背景颜色为棕色,黄色,绿色。

5:设置代理

self.dataSource = self

6:设置标题样式

let bar = TMBar.TabBar()
bar.layout.transitionStyle = .snap

7:效果图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值