2017-05-07 91 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

相關問題