iOS5 раскадровка UIPageViewController - PullRequest
2 голосов
/ 23 марта 2012

Я занимаюсь разработкой приложения и использую раскадровку 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];

} 

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

Любая помощь будет принята с благодарностью.Спасибо

1 Ответ

0 голосов
/ 30 декабря 2012

Сначала убедитесь, что вызывается 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;
}

Я обнаружил, что раскадровки не работают так, как я ожидал. То, что я начал использовать, является контейнером. В них нет ничего особенного. Это просто визуальные элементы, которые вы можете разместить внутри представления, которые затем обертываются вокруг стандартного UIViewController, а затем в области конструктора отображается связанный вид с теми же размерами, что и вид контейнера, который вы поместили в другое представление. Тогда вы можете управлять деталями там. Если вам нужно обработать любую инициализацию с помощью родительского контроллера представления, вы будете использовать метод prepareForSegue. Вам нужно будет задать имя для встраиваемого перехода для представления контейнера (а не push-перехода, как вы обычно видите), и при его запуске вы можете получить доступ к destinationViewController, который является просто встроенным контроллером представления внутри представления контейнера. Чтобы понять это, может потребоваться некоторое время.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...