2013-04-09 6 views
1

UICollectionView를 프로그래밍 방식으로 주 뷰에 추가하는 간단한 작업을 수행하려고합니다.UICollectionViewController의 뷰를 "프로그래밍 방식으로"슈퍼 뷰에 추가하기

나는 제 (종류의 UIViewController의)는 "PhotosViewController.h/시간 /의 XIB"파일을 만들어 주어 뷰를 제거하고,이 컨트롤러 &의 기본 뷰로서 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' 

나는 매우 근본적인 것을 놓치고 있습니다. 나는 지난 1 시간 동안이 문제에 대한 어떤 종류의 해결책을 찾고 있었고 아무것도 찾을 수 없었습니다.

도움을 주시면 감사하겠습니다.

+0

문제가 해결 되었습니까? http://stackoverflow.com/q/15270058/352891 – user352891

+0

collectionView 코드, flowLayout, 데이터 소스 및 위임 코드를 추가하십시오. – Alex

+0

@ user352891 아니요, 아니요 – user1646683

답변

1
[[PhotosViewController alloc] init]; 

난 당신이 컬렉션 뷰 컨트롤러를 만드는 곳은 가정 : 당신이 당신의 collectionViewLayout에 그것을 UICollectionViewFlowLayout을 제공하지 않는 것처럼 당신이 얻고있는 메시지에서

, 그것은 보인다. 이 클래스의 지정된 초기화 프로그램은 initWithCollectionViewLayout:이며 레이아웃 객체를 전달합니다. 당신은 하나를 지나치지 않으므로 불평합니다. 해당 이니셜 라이저를 사용하거나 서브 클래스에서 [super init] 대신 this를 호출하고 새 플로우 레이아웃 객체를 전달하십시오.

+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가 없다면.

+0

이 코드는 내 viewDidLoad 메서드의 일부로 사용합니다. 이 모양은 다음과 같습니다. '- (void) viewDidLoad { [super viewDidLoad]; // 펜촉에서 뷰를로드 한 후 추가 설정을 수행하십시오. UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize : CGSizeMake (200, 200)]; [flowLayout setScrollDirection : UICollectionViewScrollDirectionHorizontal]; [self.collectionView setCollectionViewLayout : flowLayout]; [[self collectionView] setBackgroundColor : [UIColor colorWithWhite : 0.25f alpha : 1.0f]]; } ' 다른 힌트가 있습니까? – user1646683

관련 문제