【发布时间】:2016-04-25 23:57:10
【问题描述】:
正如标题所述,有一种方法可以返回错误的索引。这会弄乱页面底部的索引表示点。完成此操作的方法是在不从屏幕上松开手指的情况下跳过一页。如果发生这种情况,它会弄乱其余的演示点。
here 是它在运行中的样子。
这是用于 UIPageViewController 的代码。
import UIKit
class PageViewController: UIPageViewController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("Green"),
self.newColoredViewController("Red"),
self.newColoredViewController("Blue")]
}()
private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewControllerWithIdentifier("\(color)ViewController")
}
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .Forward,
animated: true,
completion: nil)
}
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
//MARK: UIPageViewControllerDataSource
extension PageViewController: UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return nil
}
guard orderedViewControllers.count > previousIndex else {
return nil
}
return orderedViewControllers[previousIndex]
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
let orderedViewControllersCount = orderedViewControllers.count
guard orderedViewControllersCount != nextIndex else {
return nil
}
guard orderedViewControllersCount > nextIndex else {
return nil
}
return orderedViewControllers[nextIndex]
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return orderedViewControllers.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first,
firstViewControllerIndex = orderedViewControllers.indexOf(firstViewController) else {
return 0
}
return firstViewControllerIndex
}
}
对此的任何帮助将不胜感激,谢谢。
【问题讨论】:
-
根据您发布的视频,这听起来像是一个框架错误。我建议登录 Apple 错误报告器并在上面打开一个错误。
-
@DuncanC 我想是这样,我只是担心这可能只是代码错误。如果不是框架错误,而是我的代码中的缺陷,我不想提交错误报告。
-
您如何设法用一根手指滑动并跳过页面?除非您的页面没有页面控制器的框架那么宽,否则这可能会使页面控制器感到困惑
-
@user3802077 我没有只用一根手指滑动。我让 PageController 认为我刷了一个。我小心地滑过一根手指,但没有取下它,然后我将另一根手指放在屏幕上,同时松开第一根手指。现在可以用第二根手指跳过整个页面。
-
我也将记录一个错误。我可以很容易地重现这个问题。
标签: ios swift uipageviewcontroller