2013-03-09 91 views
5

我有一個UIPageViewController,其中包含從通過網絡獲取的數據實例化的視圖控制器。當用戶正在尋呼並在最後的幾頁之內時,我啓動了一個新的網絡操作,並將生成的新視圖控制器放到我的UIPageViewControllerDataSource的可變視圖控制器陣列的末尾。一般來說,這一切都很好。如何在用戶到達最後一頁後向UIPageViewController添加新頁面?

但是,如果網絡速度較慢(或用戶速度較快),則有可能在網絡操作完成之前到達最終頁面。由於pageViewController:viewControllerAfterViewController:在用戶到達最後一頁時被調用,它已經返回nil(「表示沒有下一個視圖控制器」)。

有沒有一種很好的方法來強制UIPageViewController再次調用pageViewController:viewControllerAfterViewController:(這樣當網絡操作完成並且現在有新頁面時,我可以強制這個調用,以便用戶可以翻頁到新頁面)?或者是有一種解決方法(可能阻止用戶分頁到最後一頁,但仍顯示反彈動畫)?

+0

我有同樣的問題 - 如果你找到一個方法,請你可以在這裏發佈你的解決方案。我也會這樣做。謝謝 – ssloan 2013-03-10 18:00:39

回答

1

ssloan的答案是關鍵的一部分,但在我的情況下,簡單地在網絡操作完成塊中調用setViewControllers:direction:animated:completion:是不夠的(由於一些邊緣情況)。

我的解決辦法來存儲這些pageViewController:viewControllerAfterViewController:返回nil最近的視圖控制器(我把它叫做endPage),並創建一個方法...

- (void)fixAndResetEndPage { 
    if (self.endPage && self.endPage == self.currentPage) { 
     [self.pageController setViewControllers:@[self.currentPage] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 
     self.endPage = nil; 
    } 
} 

...我把它叫做每當我的NSMutableArray中內容控制器發生了變化(例如,網絡操作完成),並且在pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:中每當完成時都是YES

+0

根據我的經驗,調用setViewControllers()並不能保證調用pageViewController:viewControllerAfterViewController。 – Lombas 2016-10-05 22:03:23

5

在這裏看到:Refresh UIPageViewController - reorder pages and add new pages

當你得到你的數據從網絡上回來,打電話setViewControllers: direction: animated: completion:,並重新設置當前視圖到當前的一個。這迫使它重新呼叫pageViewController:viewControllerAfterViewController:

+0

它強制當前視圖控制器重新加載。有沒有重新加載當前頁面的修復? – neobie 2016-02-13 09:21:41

相關問題