Swift - PageViewController

Swift - PageViewController 首页 / iOS入门教程 / Swift - PageViewController

在iOS应用程序中,无涯教程使用容器和内容视图控制器来显示应用程序的内容。但是,需要在应用程序中的视图控制器之间进行导航,以便用户可以轻松地在视图控制器之间进行切换。在本教程的这一部分中,无涯教程将讨论PageViewControlller是容器视图控制器,它管理内容页面之间的导航,其中每个页面由子视图控制器管理。它是UIPageViewController的实例,该实例继承了UIViewController。

class UIPageViewController : UIViewController

在许多iOS应用程序中使用PageViewController来使用户在应用程序内容的各个页面之间导航。可以在应用程序中以编程方式控制导航。 PageViewController使用无涯教程指定的过渡来动画化更改。

在此示例中,无涯教程将使用两个视图控制器创建一个项目,其中根页面视图控制器管理视图控制器之间的导航。

无涯教程网

首先,无涯教程需要将PageViewController添加到Storyboard。为此目的,在对象库中搜索页面视图控制器并将结果拖动到Storyboard。

iOS PageViewController

如下图所示,这会将Page View Controller添加到storyboard。无涯教程将在属性检查器中将此视图控制器设置为初始视图控制器,并在身份检查器中将RootPageViewController.swift和Storyboard ID分配给RootVC。

iOS PageViewController

自PageViewController之后,无涯教程添加了用于管理不同视图控制器之间的导航的功能。因此,在该项目中,无涯教程还将添加两个视图控制器,如下图所示。无涯教程为视图控制器提供了不同的背景色以进行识别。无涯教程还将StoryboardID提供给身份检查器中的视图控制器FirstVC和SecondVC。

iOS PageViewController

在这里,无涯教程为该项目构建了Storyboard。现在,无涯教程将以编程方式在RootPageViewController类中定义导航。它符合UIPageViewControllerDataSource协议,并实现其两个方法以将在当前视图控制器之前和之后出现的视图控制器返回。

RootPageViewController类定义其中进行导航的View Controller列表。使用PageViewController类的setViewControllers()方法,将列表中存在的第一个视图控制器设置为当前视图控制器。

RootPageViewController.swift

import UIKit


class RootPageViewController: UIPageViewController {
    
    lazy var vcList:[UIViewController] = {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let firstVC = storyboard.instantiateViewController(identifier: "FirstVC")
        let secondVC = storyboard.instantiateViewController(identifier: "SecondVC")
        
        return [firstVC, secondVC]
        
    }()


    override func viewDidLoad() {
        super.viewDidLoad()
       //Do any additional setup after loading the view.
        self.dataSource = self
        if let vc = vcList.first{
            self.setViewControllers([vc], direction: .forward, animated: true, completion: nil)
        }
        
    }
}


extension RootPageViewController : UIPageViewControllerDataSource{
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let index = vcList.lastIndex(of: viewController) else { return nil }
        let previousIndex = index - 1
        guard previousIndex >= 0 else {return nil}
        guard previousIndex < vcList.count else {return nil}
        return vcList[previousIndex]
        
    }
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let index = vcList.lastIndex(of: viewController) else { return nil }
        let previousIndex = index + 1
        guard previousIndex >= 0 else {return nil}
        guard previousIndex < vcList.count else {return nil}
        return vcList[previousIndex]


    }
}

输出:

iOS PageViewController

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

iOS开发高手课 -〔戴铭〕

Linux实战技能100讲 -〔尹会生〕

NLP实战高手课 -〔王然〕

Kafka核心源码解读 -〔胡夕〕

成为AI产品经理 -〔刘海丰〕

编程高手必学的内存知识 -〔海纳〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

说透元宇宙 -〔方军〕

结构执行力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)