2012-08-09 12 views
5

, więc próbuję utworzyć czytnik ibooks-like i muszę zaktualizować zawartość UIPageViewController dynamicznie po otrzymaniu danych z usługi internetowej. Z wielu powodów muszę utworzyć instancję na początku, a następnie zaktualizować, gdy dane się pojawią.Dynamicznie przeładuj UIPageViewController po zmianie źródła danych

Tworzę to tak:

NSDictionary *options = 
[NSDictionary dictionaryWithObject: 
[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin] 
          forKey: UIPageViewControllerOptionSpineLocationKey]; 

self.pageController = [[UIPageViewController alloc] 
         initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl 
         navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal 
         options: options]; 

self.pageController.dataSource = self; 
self.pageController.delegate = self; 

[[self.pageController view] setFrame:[[self view] bounds]]; 

MovellaContentViewController *initialViewController = [self viewControllerAtIndex:0]; 

self.controllers = [NSArray arrayWithObject:initialViewController]; 

[self.pageController setViewControllers:self.controllers 
           direction:UIPageViewControllerNavigationDirectionForward 
           animated:NO 
          completion:nil]; 

[self addChildViewController:self.pageController]; 
[[self view] addSubview:[self.pageController view]]; 
[self.pageController didMoveToParentViewController:self]; 

a potem po prostu ustawić self.controllers = newControllersArray;

szukam czegoś podobnego reloadData dla UITableViewController, czy istnieje coś takiego dla UIPageViewController?

Odpowiedz

1

głównym problemem w ponieważ widok internetowy przechwytywał wszystkie dotknięcia użytkownika i dlatego UiPageViewController nie wywoływał metod delegatów. Po ustawieniu widoku, aby ignorować zdarzenia związane z dotknięciem użytkownika, wszystko zaczęło działać poprawnie.

11

Musisz wysłać setViewControllers: kierunek: animowane: Zakończenie: do PageController ponownie i nadać mu pierwszego kontrolera widoku do wyświetlania:

[self.pageController setViewControllers:[NSArray arrayWithObject: 
              [self viewControllerAtIndex:0] 
             ] 
           direction:UIPageViewControllerNavigationDirectionForward 
           animated:NO 
          completion:nil]; 

Jeśli viewControllerAtIndex: nie dostępu self.controllers jak początkowo zakłada, powinno to chyba raczej

[self.pageController setViewControllers:[NSArray arrayWithObject: 
              [self.controllers objectAtIndex:0] 
             ] 
           direction:UIPageViewControllerNavigationDirectionForward 
           animated:NO 
          completion:nil]; 

zamiast

+0

Próbowałem, taki sam wynik. – valeriodidonato

+0

czy viewControllerAtIndex: dostęp do elementów self.controllers czy coś innego? –

Powiązane problemy