2017-05-07 26 views
0

我一直在尝试创建一个具有3个视图的开放场景,这些视图嵌入在页面视图控制器中。我们的目标是创建一些类似Instagram的内容,其中您的社交媒体馈送位于中间,然后当您向右滑动时,它会将您引导至视图,如果向左滑动,则会将您带到不同的视图。然而,用我目前的代码,视图控制器无限地滑动,我想知道是否有人知道如何解决这个问题。取出页面视图控制器设置的无限循环

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

这是我多么希望它看起来像: What I want the functionality to be

这里是我的网页浏览器的代码。我有一个主页面视图控制器连接其他2个视图。

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] 

    } 

} 

任何帮助,将不胜感激!

回答

0

删除此:

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

这:

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

代码的那些2块,分别负责循环您viewControllers。简单地删除它们会给你你正在寻找的结果。

+0

导致此行崩溃:return viewControllerArray [previousIndex]。错误表示致命错误:索引超出范围。 –

+0

也许反转viewControllerArray.last和viewControllerArray.first位置。因为如果索引低于0你想显示的第一页不是最后的 – Nitrousjp

+0

或者只是返回零 – Nitrousjp