簡體   English   中英

UIPageViewController 有錯誤

[英]UIPageViewController with bug

當數據源方法ViewControllerAfterViewControllerBefore返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM