2014-01-28 3 views
6

UICollectionView으로 시작하기 만하면됩니다. IB를 사용하여 UIViewController에 간단한 UICollectionView을 생성했습니다. 페이징으로 가로로 스크롤합니다. 간단한 UICollectionViewCellUICollectionView 안에 넣었습니다. 셀의 재사용 식별자를 설정했습니다.UICollectionViewCell을 초기화 할 때 viewWithTag는 nil을 반환합니다.

UICollectionViewCell 안에 태그가 100 인 UILabel을 넣었습니다. viewDidLoad에서

, 내가 전화 :

[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Thing"]; 

나중에 내가 그렇게 같은 셀을 초기화하려고 :

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Thing" forIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor greenColor]; 

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
    nameLabel.text = @"Bogus"; 

    return cell; 
} 

내가 응용 프로그램, 제대로보기로드를 실행하는 경우; 2 셀을 가로로 스크롤 할 수 있습니다. 나는 각 세포를 식별하는 못생긴 초록색을 본다.

그러나 viewWithTag 메서드는 nil을 반환하므로 nameLabel 텍스트가 설정되지 않습니다.

왜?

또한 UICollectionViewCell의 사용자 정의 하위 클래스를 정의하고이 클래스와 함께 registerClass를 호출 해 보았습니다. IB에서 셀 클래스를 사용자 정의 하위 클래스로 변경하고 하위 클래스의 UILabel 콘센트에 UILabel을 바인딩합니다.

하지만 이것도 작동하지 않습니다. (어쨌든 IBOutlets을 보유하기 위해 클래스를 정의하는 것이 필요하지 않으므로 어쨌든 사용자 정의 서브 클래스 방법을 사용하지 않는 것을 선호합니다.)

나는 여기서 명백한 것을 놓치고 있다고 생각합니다.

비슷한 문제가 여기에 설명 :

Trouble accessing Image from instance of UICollectionViewCell

+0

UILabel은 어디에 생성합니까? – Odrakir

+0

UILabel은 Interface Builder에서 구성됩니다. 나는 그것을 코드로 할당하려고하지 않는다. viewWithTag가 생성 된 인스턴스를 검색해야한다고 생각했습니다. 이것은 UITableView와 함께 작동하는 방법입니다. – Daniel

+0

코코아 콩에서 프로토 타입 CollectionViewCell에 reuseIdentifier를 할당 했습니까? – chandu

답변

26

registerClass 줄을 제거하십시오. 스토리 보드에서 작업 중이므로 필요하지 않습니다.

+0

이 작품은 나를 위해. –

+0

개발자가 sh * t를 혼동하는 이유는 무엇입니까? 대부분의 사람들이 스토리 보드를 사용하지 않습니까 ??? –

1

그것을 시도

UILabel *nameLabel = (UILabel *)[cell.contentView viewWithTag:100];

업데이트 :

당신은 셀의 계층 구조와 모든 서브 뷰의 태그를 볼 수 있습니다 [self showAllSubView:cell] ;을 할 수 태그 10으로 라벨을 찾았습니까?

- (void)showAllSubView:(UIView *)view 
{ 
    for (UIView * subView in [view subviews]) { 
     NSLog(@"%@, tag:%d", subView, subView.tag) ; 
     [self showAllSubView:subView] ; 
    } 
} 
+1

그걸 시도해 봤어 - 작동하지 않았다.킥을 위해 다시 시도 - 여전히 행운이 없음 – Daniel

+0

@ 대니얼 내 답변을 업데이트했습니다. 레이블이 셀의 계층 구조에 있는지 찾는 데 도움이 될 수 있습니다. – KudoCC

관련 문제