UIPageViewController - представление не загружается - PullRequest
0 голосов
/ 24 декабря 2011

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

Я создал проект из шаблона 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;
}

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

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

1 голос
/ 25 декабря 2011

Вы не предоставили достаточно контекста, чтобы быть уверенным, но похоже, что то, что вам нужно загрузить с раскадровки, изначально является экземпляром 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:. Кроме того, неясно, почему вы передаете раскадровку в качестве аргумента, а не используете встроенное свойство, или, к тому же, к какому классу принадлежит код, который вы опубликовали, и как оно связано с остальным приложением. , Может быть, вы могли бы предоставить немного больше информации об этом.

...