Я довольно новичок в UIPageViewControllers. У меня есть настройка, которая может отображаться через различные типы UIViewControllers.UIPageViewController и сохранение состояния UIViewControllers
Я заметил, что когда я перехожу назад к предыдущему, все данные и состояния сбрасываются (т. Е. Я ранее менял цвет фона UIViewController и возвращал его обратно к умолчанию). Я использую идентификаторы восстановления из панели рассказов, чтобы инициировать эти контроллеры.
Если я использую это, не должен ли он сохранять состояние контроллера?
Код для изменения контроллеров:
#pragma mark - UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
//This is nice and avoids having to use a counter
NSString *vcRestorationID = viewController.restorationIdentifier;
NSUInteger index = [self.controllerRestorationIDs indexOfObject:vcRestorationID];
if (index == 0) {
return nil;
}
return [self viewControllerAtIndex:index - 1];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSString *vcRestorationID = viewController.restorationIdentifier;
NSUInteger index = [self.controllerRestorationIDs indexOfObject:vcRestorationID];
//Don't allow it to go forward if there is one at the end
if (index == self.controllerRestorationIDs.count - 1) {
return nil;
}
return [self viewControllerAtIndex:index + 1];
}
#pragma mark - Private Methods
- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
// Only process a valid index request.
if (index >= self.controllerRestorationIDs.count) {
return nil;
}
// Create a new view controller.
BaseContentViewController *contentViewController = (BaseContentViewController *)[self.storyboard instantiateViewControllerWithIdentifier:self.controllerRestorationIDs[index]];
// Set any data needed by the VC here
contentViewController.rootViewController = self;
return contentViewController;
}
Есть ли способ сделать это так, состояние сохраняется и контроллеры не перезагружается каждый раз?
Используя второе решение, вы имеете в виду переменные хранилища в контроллере корневого представления, а затем передаете их каждый раз, когда создается новый контроллер? – Kex