2012-11-04 3 views
9

UICollectionView를 처음 사용하기 시작했습니다. 멋지게 작동하지만 문제와 그에 대한 질문이있는 것 같습니다.UICollectionView registerCell - 빈 셀

나는 다음과 같이 내 UICollectionView 설정을 가지고 사용자 정의 셀 :

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ContactCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.nameLbl.text = @"text"; 

    return cell; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(145, 95); 
} 

- (UIEdgeInsets)collectionView: 
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(10, 10, 10, 10); 
} 

그래서이 모든 멋쟁이, 그러나 내가 추가 한이 라인 viewDidLoad에 :

[collectionView registerClass:[ContactCell class] forCellWithReuseIdentifier:@"Cell"]; 

이 일으키는 문제입니다 나는 왜 그런지 이해하지 못한다. 이 줄을 활성화하면 모든 셀이 비어있게됩니다. 어째서? 내가 뭘 놓치고 있니?

또한 내가 이해하는 것처럼, 그 라인이 재사용 가능한 셀을 가능하게한다면, 왜 컬렉션 뷰와 테이블 뷰를 가질 필요가 없는가?

기술적 인 도움이나 도움이 될만한 답변이 있으면 감사합니다.

+0

방법은 셀에 대한보기를 설정? 서브 클래스에서 프로그래밍 방식으로? – jackslash

+0

스토리 보드에 설정했습니다. 하나의 셀에 UICollectionView가 있고 그 셀에 식별자, 사용자 정의 클래스가 연결되어 있습니다. –

답변

24

당신은 스토리 보드에 디자인 한 셀을 인터페이스 빌더의 오른쪽 창에서 해당 셀에 지정한 재사용 식별자로 자동 등록합니다. 재사용 식별자에 대한 클래스를 다시 등록함으로써 콜렉션 뷰는 하위 클래스에 대해 alloc init을 호출하고 뷰를 프로그래밍 방식으로 설정하기를 기대합니다. the documentation에서

: 이전에 같은 재사용 식별자 클래스 또는 펜촉 파일을 등록하면

, 당신은 cellClass 매개 변수에 지정한 클래스는 이전 항목을 대체합니다. 에 지정된 재사용 식별자에서 클래스의 등록을 취소하려면 cellClass에 nil을 지정할 수 있습니다.

당신은 세포에게 스토리 보드 당신이 중 하나를 설정하여 인터페이스를 프로그래밍 할 수의 외부를 디자인하거나 별도의 XIB에서 셀을 설정 한 다음 호출 할 경우

- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier

펜촉해야합니다 인터페이스 빌더에 올바른 재사용 식별자를 설정하여 사용자 정의 서브 클래스의 셀인 최상위 레벨보기 하나를 가져야합니다.

+0

그래서 내가 말했듯이 시각적으로 xib에서 내 셀을 디자인하고 제안한 방법을 사용할 수 있습니다. 그렇지 않으면 프로그래밍 방식으로 만들어야합니다. –

+1

또는 프로토 타입 셀을 컬렉션보기에 추가하여 스토리 보드에서 디자인 할 수 있습니다. 스토리 보드는 셀을 자동으로 등록하고 재사용을 켭니다. – jackslash

+0

은'registerClass :'를 호출 할 때 비어있는 이유입니다. 스토리 보드에서했던 것들을 설정 해제하고있는 것입니다. 그것도 왜 라인없이 작동합니다.컬렉션 뷰는 재사용 가능한 셀을 지정하지 않아도 기능을 수행하지 못합니다. – jackslash

0

제거 우리는이 라인이 필요하지 않습니다 스토리 보드를 들어

[self.collectionview registerClass:[NewCell class] forCellWithReuseIdentifier:@"Cell"]; 

+0

예 대답은 √입니다 –