UIPageViewController в качестве корневого контроллера приложения - PullRequest
2 голосов
/ 12 января 2012

Я использую UIPageViewController в первый раз. Это, конечно, iOS5, и мне комфортно с ARC. Я не использую раскадровки.

Во всех фрагментарных примерах, которые я вижу, UIPageViewController никогда не «владеет» экраном. Он всегда является потомком какого-то другого контроллера представления. Это требование? Я хочу сделать его корневым контроллером моего приложения, как это обычно делается с UINavigationController. Я пытаюсь все это настроить программно, но все, что я получаю, это пустой контроллер просмотра страниц без содержимого.

Вот как приложение запускается (весь код приведен в моем классе делегатов приложения):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self configureLoggers];
    [self applyAppearanceProxySettings];
    [self configureDataStore];
    [self configureNavigationController];
    [self configurePageController];    // <-- this is where we do the page view controller setup, shown next.

    self.window.rootViewController = self.pageController;
    [self.window makeKeyAndVisible];

    log4Info(@"Application completed launching.");

    return YES;
}

И тот метод, упомянутый в коде выше, который выполняет настройку для Контроллера просмотра страницы:

- (void)configurePageController {
    CCFrontCoverViewController *frontCoverViewController = [[CCFrontCoverViewController alloc] initWithNibName:nil bundle:nil];

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

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

    self.pageController.delegate = self;
    self.pageController.dataSource = self;
    self.pageController.view.backgroundColor = [UIColor redColor]; // So we know we're missing content because red shows through.

    NSArray *pageViewControllers = [NSArray arrayWithObjects:frontCoverViewController, self.navigationController, nil];
    [self.pageController setViewControllers:pageViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}

Я также включил ведение журнала в два метода обратного вызова источника данных, и они даже не были вызваны.

Когда это запустится, я просто получаю пустой красный экран. Опять же, нет раскадровки. Чего мне не хватает?

1 Ответ

5 голосов
/ 14 января 2012

Я могу использовать UIPageViewController в качестве корневого контроллера представления в примере проекта при условии, что:

  • UIPageViewController правильно инициализируется с допустимым расположением позвоночника.
  • Установлено свойство UIPageViewController *1008* * (в соответствии с расположением позвоночника).
  • Массив UIPageViewController viewControllers установлен (опять же, в соответствии с положением позвоночника и свойством doubleSided).

Похоже, вы не установилиdoubleSided до YES в вашем коде (поскольку в вашем массиве viewControllers есть два элемента).Исправляет ли это добавление перед установкой массива viewControllers?

РЕДАКТИРОВАТЬ: Только для потомков, в UIPageViewController docs в описании метода setViewControllers:direction:animation:completion: есть диаграмма, показывающая количество контроллеров представления, разрешенных для всехдопустимые комбинации местоположения позвоночника и doubleSided.

...