ios - 删除页面 View Controller 设置的无限循环

标签 ios swift uipageviewcontroller

我一直在尝试创建一个具有 3 个 View 的开放场景,这些 View 嵌入到页面 View Controller 中。我们的目标是创建像 Instagram 这样的东西,你的社交媒体源位于中间,然后当你向右滑动时,它会带你到一个 View ,如果你向左滑动,它会带你到另一个 View 。然而,使用我当前的代码, View Controller 无限滑动,我想知道是否有人知道如何解决这个问题。

这是我当前的设置: Current Setup of Page Views

这是我想要的样子: What I want the functionality to be

这是我的页面 View Controller 代码。我有一个主页面 View Controller 链接其他 2 个 View 。

class HomeRootPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    lazy var viewControllerArray: [UIViewController] = {
        return [self.ViewControllerInstance(name: "FeedViewController"),
               self.ViewControllerInstance(name: "DMViewController"),
               self.ViewControllerInstance(name: "ProfileViewController")]
    }()

    private func ViewControllerInstance(name: String) -> UIViewController {
        return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name)

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.dataSource = self
        self.delegate = self

        if let firstViewController = viewControllerArray.first {
            setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
        }
    }


    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

        guard let viewControllerIndex = viewControllerArray.index(of: viewController) else {
            return nil
        }

        let previousIndex = viewControllerIndex - 1

        guard previousIndex >= 0 else {
            return viewControllerArray.last
        }

        guard viewControllerArray.count > previousIndex else {
            return nil
        }

        return viewControllerArray[previousIndex]

    }

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

        guard let viewControllerIndex = viewControllerArray.index(of: viewController) else {
            return nil
        }

        let nextIndex = viewControllerIndex + 1

        guard nextIndex < viewControllerArray.count else {
            return viewControllerArray.first
        }

        guard viewControllerArray.count > nextIndex else {
            return nil
        }

        return viewControllerArray[nextIndex]

    }

}

如有任何帮助,我们将不胜感激!

最佳答案

删除这个:

guard previousIndex >= 0 else {
    return viewControllerArray.last
}

还有这个:

guard nextIndex < viewControllerArray.count else {
    return viewControllerArray.first
}

这两个代码块负责循环 View Controller 。只需删除它们即可获得您想要的结果。

关于ios - 删除页面 View Controller 设置的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835306/

相关文章:

xcode - NSURLRequest 中的 HTTPMethod

ios - 页面指​​示器快速不同步

ios - UIPageViewController 方向只向前

ios - Swift - 如何制作包含标签的表格

ios - UIPageViewControllerDelegate - iOS 5 的 willTransitionToViewControllers 替代品

ios - 如何告诉我的 imagePickerController 委托(delegate)我的自定义 UIButton 正在处理拍照

ios - iOS检测何时从后台关闭应用程序?

ios - CoreData insertNewObjectForEntityForName 和 executeFetchRequest 返回 nil

ios - 如何在 swift 4.x 中使用 SwiftyJSON 对 [json] 进行排序?

ios - Swift/Math - 缩放时保持原点