在 UIPageViewController 中跟踪页面索引的可靠方法 - Swift
Reliable way to track Page Index in a UIPageViewController - Swift
我在位于常规 UIViewController 中的 Container 中有一个 UIPageViewController(自定义)。我需要能够在每次页面更改时调用一个事件,但前提是它确实发生了变化,而不仅仅是中途或任何类似的事情。
使用:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
不可靠,由于某种原因每次都没有调用。
如果您的回答包含有关 willTransitionToViewControllers 或 didFinishAnimating 的任何内容,请详细说明,而不要只是提及它们,因为我已经知道它们存在,但不了解使用它们的正确方法。
谢谢
使用 didFinishAnimating
它有一个 completed
和 finished
属性 所以你知道页面实际上已经改变了。从页面ViewController可以得到当前显示的页面,然后得到这个VC在你的模型中的位置
首先确保你的ViewController采用UIPageViewControllerDelegate
设置代表(例如 viewDidLoad
)
pageViewController.delegate = self
然后实现如下功能:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if (completed && finished) {
if let currentVC = pageViewController.viewControllers?.last {
let index = myViewControllers.indexOf(currentVC)
//do something with index
}
}
}
我在位于常规 UIViewController 中的 Container 中有一个 UIPageViewController(自定义)。我需要能够在每次页面更改时调用一个事件,但前提是它确实发生了变化,而不仅仅是中途或任何类似的事情。
使用:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
不可靠,由于某种原因每次都没有调用。
如果您的回答包含有关 willTransitionToViewControllers 或 didFinishAnimating 的任何内容,请详细说明,而不要只是提及它们,因为我已经知道它们存在,但不了解使用它们的正确方法。
谢谢
使用 didFinishAnimating
它有一个 completed
和 finished
属性 所以你知道页面实际上已经改变了。从页面ViewController可以得到当前显示的页面,然后得到这个VC在你的模型中的位置
首先确保你的ViewController采用UIPageViewControllerDelegate
设置代表(例如 viewDidLoad
)
pageViewController.delegate = self
然后实现如下功能:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if (completed && finished) {
if let currentVC = pageViewController.viewControllers?.last {
let index = myViewControllers.indexOf(currentVC)
//do something with index
}
}
}