取出页面视图控制器设置的无限循环
Posted
技术标签:
【中文标题】取出页面视图控制器设置的无限循环【英文标题】:Take out Infinite loop for page view controller setup 【发布时间】:2017-05-07 18:46:09 【问题描述】:我一直在尝试创建一个具有 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]
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:删除这个:
guard previousIndex >= 0 else
return viewControllerArray.last
还有这个:
guard nextIndex < viewControllerArray.count else
return viewControllerArray.first
这两个代码块负责循环您的视图控制器。只需删除它们即可获得所需的结果。
【讨论】:
导致此行崩溃:返回 viewControllerArray[previousIndex]。错误说致命错误:索引超出范围。 可能会颠倒 viewControllerArray.last 和 viewControllerArray.first 的位置。因为如果索引低于 0,你想显示第一页而不是最后一页 或者直接返回 nil以上是关于取出页面视图控制器设置的无限循环的主要内容,如果未能解决你的问题,请参考以下文章