2013-04-09 2 views
1

Я пытаюсь сделать простую задачу по добавлению UICollectionView к основному виду программно.Добавление представления UICollectionViewController в супер-просмотр «программно»

я сначала создал «PhotosViewController.h/ч/XIB» файлы (типа UIViewController), удалили вид, который был дан и добавил UICollectionView в качестве основного ввиду этого контроллера & затем изменил суперкласс " PhotosViewController.h "в UICollectionViewController.

Я последовал за первые 6 шагов, описанных в данном руководстве: http://skeuo.com/uicollectionview-custom-layout-tutorial, а затем прыгнул к шагу 14. То, что я пытаюсь сделать, это просто довести эту точку зрения, когда пользователь нажимает на кнопку сегментированной управления.

if ([segmentedControl selectedSegmentIndex]==3){ 
    //Photos View Controller 
    pvc=[[PhotosViewController alloc] init]; 
    NSLog(@"Photos segment is chosen!"); 
    [[self view] addSubview:pvc.view]; **//Line 5** 
} 

Но программа выбрасывает исключение при достижении линии 5.

Это сообщение журнала, которое я получаю.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter' 

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

Любая помощь очень ценится.

+0

Это решение проблемы? http://stackoverflow.com/q/15270058/352891 – user352891

+0

Пожалуйста, добавьте код коллекции, flowLayout, datasource и делегатский код. – Alex

+0

@ user352891 Нет, это не – user1646683

ответ

1
[[PhotosViewController alloc] init]; 

Я предполагаю, что это, где вы создаете ваш контроллер представления коллекции. Назначенный инициализатор для этого класса - initWithCollectionViewLayout:, где вы должны передать объект макета. Вы не проходите мимо, поэтому он жалуется. Попробуйте использовать этот инициализатор или в своем подклассе убедитесь, что вы вызываете это вместо [super init] и передаете новый объект макета потока.

+0

Большое вам спасибо! Это была моя ошибка. Еще раз спасибо! :) – user1646683

0

Я не ясно, где вы инициализируетесь своим видом коллекции, но это должно выглядеть примерно так:

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; 

collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 
                    230.0f, 
                    [self viewWidth], 
                    [self viewHeight]) 
            collectionViewLayout:flowLayout]; 

Если у вас есть более расширенное UICollectionViewFlowLayout.

Из сообщения вы получаете, это выглядит, как будто вы не давая ему UICollectionViewFlowLayout в вашем collectionViewLayout:

+0

У меня этот код как часть моего метода viewDidLoad. Вот как это выглядит: '- (void) viewDidLoad { [super viewDidLoad]; // Выполняйте любую дополнительную настройку после загрузки изображения из его наконечника. UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize: CGSizeMake (200, 200)]; [flowLayout setScrollDirection: UICollectionViewScrollDirectionHorizontal]; [self.collectionView комплектCollectionViewLayout: flowLayout]; [[self коллекцияView] комплектBackgroundColor: [UIColor colorWithWhite: 0.25f alpha: 1.0f]]; } ' Любые другие намеки? – user1646683

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