此外,委托(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/