Раскадровка iOS5 UIPageViewController

Я разрабатываю приложение и использую раскадровку iOS5. По сути, у меня есть UITabBarController в качестве корневого контроллера, который содержит некоторые UIViewController и UISplitViewController. Что я хочу сделать, так это использовать UIPageViewController в качестве DetailController для UISplitViewController. Проблема в том, что UIPageViewController не показывает свои контроллеры представления, но показывает черный экран. Что я делаю, так это инициализирую два контроллера представления контента в методе viewDidLoad DetailController и назначаю их инструкцией:

[self setViewControllers:self.pagesViewControllerArray direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil];

так и не могу понять где ошибка.

Метод viewDidLoad выглядит следующим образом:

- (void)viewDidLoad{

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

    self.page1ViewController = [[Page1ViewController alloc] initWithNibName:@"Page1ViewController" bundle:nil];
    self.page2ViewController = [[Page2ViewController alloc] init];

    self.pagesViewControllerArray = [NSArray arrayWithObjects:self.page1ViewController, self.page2ViewController, nil];

    [self setViewControllers:self.pagesViewControllerArray direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil];

} 

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

Любая помощь могла бы быть полезна. Спасибо


person ubiAle    schedule 23.03.2012    source источник


Ответы (1)


Сначала убедитесь, что вызывается viewDidLoad. Существует так много способов инициализации экземпляра, и я не уверен, когда используется каждый вариант. Если используется initWithNibName, то viewDidLoad вызываться не будет, если я правильно помню. Чтобы убедиться, что метод вызывается, вы можете добавить оператор NSLog, например...

NSLog(@"viewDidLoad: %@", NSStringFromClass([self class]));

Это будет отображаться в консоли отладчика, если он вызывается. Вы также можете добавить метод initWithNibName, чтобы узнать, вызывается ли он.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        NSLog(@"initWithNibName: %@", NSStringFromClass([self class]));
    }
    return self;
}

Я обнаружил, что раскадровки работают не так, как я ожидал. Я начал использовать Container Views. В них нет ничего необычного. Это просто визуальные элементы, которые вы можете поместить внутри представления, которые затем являются обертками вокруг стандартного UIViewController, а затем область дизайна показывает связанное представление с теми же размерами, что и представление контейнера, которое вы разместили в другом представлении. Затем вы можете управлять деталями там. Если вам нужно обработать любую инициализацию с родительским контроллером представления, вы будете использовать метод prepareForSegue. Вам нужно будет установить имя для встраиваемого перехода для представления контейнера (а не переходного перехода, как вы обычно видите), и когда он срабатывает, вы можете получить доступ к targetViewController, который является просто встроенным контроллером представления внутри представления контейнера. Может потребоваться некоторое время, чтобы понять это.

Также найдите UIPageViewController на вкладке Documentation в Organizer. В нижней части левого столбца указан пример проекта, который может быть вам полезен.

person Brennan    schedule 30.12.2012