swift - 添加为 subview 时 UIPageViewController 无法识别滑动

标签 swift uipageviewcontroller

此外,委托(delegate)或数据源方法都没有被调用。

setupPageView 是从 viewController 的 viewDidLoad 调用的,该 viewController 拥有嵌入 pageViewContoller 的 View 。

这里有我忽略的东西吗?

func setupPageView() {
    pageView = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: [.interPageSpacing : 9])
    pageView.dataSource = self
    pageView.delegate = self
    pageView.setViewControllers([graphViews[0]], direction: .forward, animated: true, completion: nil)

    self.addChild(pageView)
    let bounds = pageViewContainer.bounds
    pageView.view.frame = bounds
    pageViewContainer.addSubview(pageView.view)
    pageView.didMove(toParent: self)
}

使用以下代码手动更改页面效果很好:

@IBAction func segmentedControlChanged(_ sender: UISegmentedControl) {
    var direction: UIPageViewController.NavigationDirection = .forward
    let newIndex = sender.selectedSegmentIndex
    if newIndex == index {
        return
    }
    if newIndex < index {
        direction = .reverse
    }
    index = newIndex
    pageView.setViewControllers([graphViews[index]], direction: direction, animated: true, completion: nil)
}

扩展 GraphPageView:UIPageViewControllerDelegate {

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    if completed {
        //update index
        guard let currentVC = pageViewController.viewControllers?[0] else { fatalError("No Current VC")}
        guard let currentIndex = graphViews.index(of: currentVC) else { fatalError("No VC found") }
        self.index = currentIndex
    }
}

}

扩展 GraphPageView:UIPageViewControllerDataSource {

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    //
    if index == 0 { //@ begining of stack
        return nil
    } else {
        return graphViews[index - 1]
    }
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    //
    if index == graphViews.count { //@ end of stack
        return nil
    } else {
        return graphViews[index + 1]
    }
}

最佳答案

您可以尝试通过以下行允许交互

pageView.isUserInteractionEnabled = true

当一个 View 封装在其他 View 中但需要捕获触摸时,这会有所帮助

关于swift - 添加为 subview 时 UIPageViewController 无法识别滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499686/

相关文章:

iOS - 将文件从另一个应用程序导入我的应用程序

IOS 10 objectForKey ("key") 兼容性

swift - 这个 SwiftUI 动画应该只会淡出。为什么会向右移动?

ios - 在 UIPageViewController 的 ViewController 中更新数据

ios - 嵌套 UICollectionViews 与 UIPageViewController

swift - 如何使 ScrollView 内的 TableView 的滚动行为自然

swift - 添加枚举后失去了对 Codable 的一致性

swift - 试图让 webView 加载 2 个 URLS

ios - Swift - 在 UIPageViewController 中的 3 个不同 View Controller 之间导航按钮

ios - 将 UIPageViewController 与快速和多 View Controller 一起使用