SwiftUI:如何将PageView的currentPage与firing View的传递索引连接起来

您所在的位置:网站首页 frameset属性 SwiftUI:如何将PageView的currentPage与firing View的传递索引连接起来

SwiftUI:如何将PageView的currentPage与firing View的传递索引连接起来

#SwiftUI:如何将PageView的currentPage与firing View的传递索引连接起来| 来源: 网络整理| 查看: 265

我遵循AppleInterfacing-with-UIkit的例子在SwiftUI中使用PageView。我想在我的应用程序中实现它。场景是,在中,当用户点击图像列表中的一个图像时,它将以视图和选定的索引作为参数触发对的调用。

但是当我点击图像列表中的任何一个项目时,它总是显示带有第一个元素的页面视图。我试图在的中更改它,但是它没有工作。

在控制台中,我尝试打印一些东西,我看到当前页面没有改变。

ReceivedIdx: 0 Current page: 1 ReceivedIdx: 3 Current page: 1 ReceivedIdx: 5 Current page: 1

当前,连接在&Amp;,但是如何将与它们连接起来呢?因为它是为其选择图像的触发点。

... private struct ImageList: View { var images: [ImageViewModel] @State private var showSheet = false @State private var selectedIdx = 0 var body: some View { VStack(alignment: .leading) { Text("Images") .font(.headline) ScrollView(.horizontal) { HStack(alignment: .top, spacing: 6) { ForEach(0.. Coordinator { Coordinator(self) } func makeUIViewController(context: Context) -> UIPageViewController { let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal) pageViewController.dataSource = context.coordinator pageViewController.delegate = context.coordinator return pageViewController } func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) { pageViewController.setViewControllers([controllers[currentPage]], direction: .forward, animated: true) } class Coordinator: NSObject, UIPageViewControllerDataSource, UIPageViewControllerDelegate { var parent: PageViewController init(_ pageViewController: PageViewController) { self.parent = pageViewController } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { guard let index = parent.controllers.firstIndex(of: viewController) else { return nil } if index == 0 { return parent.controllers.last } return parent.controllers[index - 1] } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { guard let index = parent.controllers.firstIndex(of: viewController) else { return nil } if index + 1 == parent.controllers.count { return parent.controllers.first } return parent.controllers[index + 1] } func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { if completed, let visibleViewController = pageViewController.viewControllers?.first, let index = parent.controllers.firstIndex(of: visibleViewController) { parent.currentPage = index } } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3