Динамически перезагружать UIPageViewController после изменения источника данных

поэтому я пытаюсь создать программу для чтения ibooks, и мне нужно динамически обновлять содержимое UIPageViewController после получения данных из веб-сервиса. По целому ряду причин я должен сначала создать экземпляр, а затем обновить его, когда поступят данные.

Я создаю это так:

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];

а потом я просто поставил self.controllers = newControllersArray;

Я ищу что-то вроде reloadData для UITableViewController, есть ли такая вещь для UIPageViewController?


person valeriodidonato    schedule 09.08.2012    source источник


Ответы (2)


Вы должны снова отправить setViewControllers:direction:animated:completion: на pageController и дать ему первый контроллер представления для отображения:

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

Если viewControllerAtIndex: не имеет доступа к self.controllers, как я сначала предположил, скорее всего, это должно быть

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

вместо

person Jörn Eyrich    schedule 09.08.2012
comment
имеет ли viewControllerAtIndex: доступ к элементам self.controllers или к чему-то еще? - person Jörn Eyrich; 10.08.2012

Основная проблема заключалась в том, что веб-представление перехватывало все прикосновения пользователя, и поэтому UiPageViewController не вызывал методы делегата. После настройки веб-просмотра для игнорирования событий касания пользователя все начало работать правильно.

person valeriodidonato    schedule 22.08.2012