【发布时间】:2017-02-28 09:36:17
【问题描述】:
我用 PageView 控制器创建了一个简单的故事板。
我将在另外两个视图控制器之间切换。
我的 PageView Controller 是一个自定义类TutorialPageViewController。我还创建了一个自定义 DataSource 类。
在 DataSource 类中,我希望在尝试滚动时调用 pageViewController 方法。然而,这种情况并非如此。我在这两种方法上都有断点,它们从未被调用过。
第一个视图控制器“Page the first”正确出现,但尝试滚动并不会调用方法,所以我还不能使用它们(因此它们现在返回 nil)。
如果我将视图控制器的 DataSource 设置为 self 并将方法放在那里,它们会被正确调用。但我想将这些方法移到一个单独的类中,以便更好地管理代码。那么为什么它不起作用呢?
我试过了
- 将我的 DataSource 类设置为
UIScrollViewDelegate和UIPageViewControllerDelegate,并将视图控制器的delegate设置为 DataSource - PageView 的过渡风格是 Scroll
class TutorialPageViewController : UIPageViewController {
override func viewDidLoad() {
reset()
}
func reset() {
let dataSource = TutorialPageDataSource(storyBoard: storyboard!)
let content = dataSource.firstContentViewController
self.dataSource = dataSource
self.setViewControllers([content], direction: .forward, animated: true, completion: nil)
}
}
class TutorialPageDataSource : NSObject, UIPageViewControllerDataSource {
private var _storyboard: UIStoryboard
var firstContentViewController: UIViewController
var secondContentViewController: UIViewController
init(storyBoard: UIStoryboard) {
_storyboard = storyBoard
firstContentViewController = _storyboard.instantiateViewController(withIdentifier: "FirstContentViewController")
secondContentViewController = _storyboard.instantiateViewController(withIdentifier: "FirstContentViewController")
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// break point here never reached
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
// break point here never reached
return nil
}
}
【问题讨论】:
标签: swift uipageviewcontroller xcode8 ios10