2

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

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

} 

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

Любая помощь была бы действительно оценена. Спасибо

ответ

0

Сначала убедитесь, что вызывается 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. Вам нужно будет установить имя для вставки segue для представления контейнера (а не нажимать segue, как вы обычно видите), и когда он срабатывает, вы можете получить доступ к целевому контроллеру, который является просто встроенным контроллером представления внутри представления контейнера. Это может занять некоторое время, чтобы понять это.

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

Смежные вопросы