2011-12-24 2 views
-1

Я хочу загрузить UIView как первую страницу и некоторые UIImageViews после этого. UIImageViews загружается отлично, но первый UIView показывает пустой. Я разработал UIView в раскадровке. У него есть некоторые UIButtons и несколько других элементов управления. Что я делаю не так?UIPageViewController - просмотр не загружается

Я создал проект из шаблона pageController по умолчанию.

ModelController.m

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Create the data model. 
     /* 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     _pageData = [[dateFormatter monthSymbols] copy]; 
     */ 
     NSMutableArray *imageViews = [[NSMutableArray alloc] init]; 

     FirstViewController *firstViewController = [[FirstViewController alloc] init]; 
     firstViewController.view.frame = CGRectMake([UIScreen mainScreen].bounds.origin.x,[UIScreen mainScreen].bounds.origin.y,[[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width); 
     [imageViews addObject:firstViewController]; 


     for (int i=1; i<=19; i++) { 
      UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"picture%i.jpg", i]]]; 

      imageView.frame = CGRectMake([UIScreen mainScreen].bounds.origin.x,[UIScreen mainScreen].bounds.origin.y,[[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width); 
      [imageViews addObject:imageView]; 
     } 
     _pageData = imageViews; 
    } 
    return self; 
} 

- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard 
{ 
    // Return the data view controller for the given index. 
    if (([self.pageData count] == 0) || (index >= [self.pageData count])) { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    DataViewController *dataViewController = [storyboard instantiateViewControllerWithIdentifier:@"DataViewController"]; 
    dataViewController.dataObject = [self.pageData objectAtIndex:index]; 
    if(index == 0) 
    { 
     //[dataViewController addChildViewController:[self.pageData objectAtIndex:index]]; 
     FirstViewController *firstViewController = [self.pageData objectAtIndex:index]; 
     [dataViewController.view addSubview:firstViewController.view]; 
    } 
    else 
    { 
     UIImageView *imageView = [self.pageData objectAtIndex:index]; 
     [dataViewController.view addSubview:imageView]; 
    } 
    return dataViewController; 
} 

ответ

1

Я получил его для работы, добавив xib-файл для FirstViewController. То, что я рисую в xib, хорошо проявляется. Раньше я проектировал его в раскадровке.

1

Вы не предоставили достаточно контекста, чтобы быть уверенным, но это, кажется, что то, что вам нужно загрузить из раскадровки изначально является экземпляром FirstViewController, не экземпляр UIView, так что вам нужно сделать что-то вроде этого, вместо того, что вы сейчас делаете:

FirstViewController *firstViewController = [self.storyboard instantiateInitialViewController]; 

// Note: If you need to adjust the frame of the controller's view, use the screen's 
// application frame rather than its bounds. 
controller.view.frame = [UIScreen mainScreen].applicationFrame; 

Кроме того, похоже, что это плохая идея, так как вы потом заполнить остальную часть массива с экземплярами UIImageView:

[imageViews addObject:firstViewController]; 

Почему бы не добавить вид контроллера в массив? Затем вы можете устранить условную логику в своем методе viewControllerAtIndex:storyboard:. Кроме того, неясно, почему вы передаете раскадровку в качестве аргумента, а не используете встроенное свойство или, если на то пошло, какой класс принадлежит вашему коду, и какова его связь с остальной частью вашего приложения , Возможно, вы могли бы предоставить немного больше информации об этом.

+0

Это была глупая ошибка, которую я сделал вместо того, чтобы добавить представление, которое я добавлял в контроллер, я исправил его. Что касается [UIScreen mainScreen] .applicationFrame, мое приложение основано на ландшафтной ориентации, поэтому, когда я использую applicationFrame, он каким-то образом загружает представления в портретном режиме. – gangt

+0

Я пишу это снова, потому что это не позволило мне отредактировать его через 5 минут. Это была глупая ошибка, которую я сделал вместо того, чтобы добавить представление, которое я добавлял в контроллер, я исправил его. Что касается [UIScreen mainScreen] .applicationFrame, мое приложение основано на ландшафтной ориентации, но когда я использую applicationFrame, оно все равно загружает представления в портретном режиме. Я создал этот проект, используя шаблон pageViewController, и этот код находится на ModelController.m , Все еще я не мог понять, почему он не показывает элементы управления, которые я добавил в представление. – gangt

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