Skip to content

在 SwiftUI 视图的状态中跟踪页面

要添加自定义的 UIPageControl,我们需要一种从 PageView 中跟踪当前页面的方法。

为此,我们将在 PageView 中声明一个 @State 属性,并传递一个绑定给此属性,直到 PageViewController 视图。 PageViewController 更新绑定来匹配可见页面。

第 1 步

PageViewController 添加一个 currentPage 的绑定的属性。

除了声明 @Binding 属性外,还要更新对 setViewControllers(_:direction:animated:) 的调用,并传递 currentPage 的绑定的值。

第 2 步

PageView 中声明 @State 变量,并在创建子 PageViewController 时将绑定传递给属性。

请记住使用 $ 语法创建用状态来存储值的绑定。

第 3 步

通过更改 currentPage 的初始值,测试值是否通过绑定传递给了 PageViewController

PageView 添加一个按钮,让视图控制器跳转到第二个视图。

第 4 步

添加带有 currentPage 属性的文字视图,以便我们关注 @State 属性的值。

需要注意的是,当从一个页面滑动到另一个页面时,该值不会改变。

第 5 步

PageViewController.swift 中,让 coordinator 遵循 UIPageViewControllerDelegate 协议,然后添加 pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted completed: Bool) 方法。

只要页面切换动画完成,SwiftUI 就会调用此方法,所以我们可以找到当前视图控制器的索引并更新绑定。

第 6 步

除数据源外,还将 coordinator 指定为 UIPageViewController 的代理。

在两个方向上连接绑定后,文字视图会在每次滑动后更新以显示正确的页码。

在 SwiftUI 视图的状态中跟踪页面 has loaded