2013-03-09 9 views
5

Mam UIPageViewController, który zawiera kontrolery widoku, które są tworzone z danych pobranych w sieci. Kiedy użytkownik stronicuje i dostaje się na kilka stron od końca, uruchamiam nową operację sieciową i umieszczam wynikowe nowe kontrolery widoku na końcu mojej zmiennej tablicy kontrolerów widoku UIPageViewControllerDataSource. Ogólnie wszystko działa całkiem nieźle.Jak mogę dodać nowe strony do UIPageViewController po dotarciu przez użytkownika do ostatniej strony?

Ale jeśli sieć działa wolno (lub użytkownik jest szybki), możliwe jest dojście do ostatniej strony przed zakończeniem operacji sieciowych. Od pageViewController:viewControllerAfterViewController: zostaje wywołany, gdy użytkownik dotrze do ostatniej strony, to już zwrócił nil (", aby wskazać, że nie ma następnego kontrolera widoku").

Czy istnieje dobry sposób na wymuszenie na UIPageViewController ponownego wywołania pageViewController:viewControllerAfterViewController: (tak, aby po zakończeniu operacji sieciowych i pojawieniu się nowych stron, mogę wymusić to połączenie, aby użytkownik mógł przeglądać nowe strony)? Czy istnieje obejście (może uniemożliwić użytkownikowi stronicowanie do ostatniej strony, ale nadal pokazuje animację odrzuceń)?

+0

Mam ten sam problem - jeśli znajdziesz sposób na obejrzenie, możesz zamieścić tutaj swoje rozwiązanie. Zrobię to samo. Dzięki – ssloan

Odpowiedz

1

ssloan był częścią klucza, ale w moim przypadku po prostu dzwoniąc setViewControllers:direction:animated:completion: w bloku zakończenia eksploatacji sieci było mało (z powodu niektórych przypadkach krawędzi).

Moje rozwiązanie było przechowywać najnowszy kontroler widok, dla którego pageViewController:viewControllerAfterViewController: zwrócony nil (nazwałem go endPage) i utworzyć metody ...

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

... co nazwałem gdy mój NSMutableArray z kontrolery treści zostały zmutowane (np. zakończenie działania sieci) oraz w pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:, gdy zakończono, YES.

+0

W moim doświadczeniu wywoływanie setViewControllers() nie gwarantuje, że pageViewController: viewControllerAfterViewController zostanie wywołana. – Lombas

5

Zobacz tutaj: Refresh UIPageViewController - reorder pages and add new pages

Po otrzymaniu danych z powrotem z sieci, zadzwoń setViewControllers: direction: animated: completion: i ustawić aktualny pogląd na obecny jeden raz. Że zmusza go, aby ponownie wywołać odpowiedź pageViewController:viewControllerAfterViewController:

+0

Wymusza odświeżenie bieżącego kontrolera podglądu. Każda poprawka bez ponownego ładowania bieżącej strony? – neobie

Powiązane problemy