[英]UIPageViewController with bug
當數據源方法ViewControllerAfter
和ViewControllerBefore
返回 nil 時,我的 UIPageViewController 崩潰(這應該只意味着沒有更多的頁面要顯示)。 它崩潰並顯示以下消息:
'提供的視圖控制器數量 (0) 與請求轉換所需的數量 (1) 不匹配'
謝謝! 請幫忙!
我的初始化代碼:
self.pageController = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: nil)
self.pageController?.dataSource = self
// self.pageController?.delegate = self
self.pageController?.setViewControllers([self.controller.pages.first!], direction: .forward, animated: true, completion: nil)
self.updateControls()
self.addChildViewController(self.pageController!)
self.view.addSubview((self.pageController?.view)!)
self.pageController?.didMove(toParentViewController: self)
在我的數據源代碼下方:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
previousIndex = self.controller.pages[self.currentPage].pageIndex!
if previousIndex <= 0 {
print("entrou no nil do before")
return nil
}
self.previousIndex -= 1
self.currentPage = self.previousIndex
return self.controller.pages[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
nextIndex = self.controller.pages[self.currentPage].pageIndex!
nextIndex += 1
if (nextIndex == self.controller.pages.count) {
print("entrou no nil do after")
return nil
}
self.currentPage = nextIndex
return self.controller.pages[nextIndex]
}
由於其行為,這兩種方法都將返回 nil。 您需要自己處理。 這種靈活性可以將頁面放在 pageviewcontroller 中循環或以頁數結束。
你需要使用這樣的代碼:
// MARK: - PageViewControllerDataSource
//視圖控制器(頁面)標識符數組。
var pageTitles = [字符串]
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let identifier = viewController.restorationIdentifier
var index = self.pageTitles.indexOf(identifier!)!
print("index back = \(index)")
if index == 0 {
currentPageCount = -1
nextPageCount = index
}
if index == 0 || index == NSNotFound {
return nil
}
index -= 1
currentPageCount = index-1
nextPageCount = index
return self.viewControllerAtIndex(index)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let identifier = viewController.restorationIdentifier
var index = self.pageTitles.indexOf(identifier!)!
if index == NSNotFound {
return nil;
}
index += 1
if index == self.pageTitles.count {
return nil;
}
return self.viewControllerAtIndex(index)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.