2013-08-16 4 views
1

방법/때 방법에 관한 질문이 있습니다 :UICollectionView @required 메서드가 호출되는시기는 언제입니까? 내가 UICollectionView에 노력하고 있어요

- (UICollectionViewCell *)collectionView:(UICollectionView *)asker 
        cellForItemAtIndexPath:(NSIndexPath *)indexPath; 

가 호출됩니다. 그것이 가지고있는 매개 변수는 컨트롤러 뷰에있는 CollectionView 인 UICollectionView입니다. 내가 생각하는 인덱스 경로는 CollectionView에 할당 된 특정 셀의 인덱스 일뿐입니다. 그래서, 내 질문은 :

이 메서드는 언제 호출됩니까? UICollectionView 내부로 스크롤 할 때 호출되고 항목을 채울 필요가 있습니까? 또는 뷰가 인스턴스화 될 때 콜렉션 뷰를 채우도록이 뷰를 호출합니다.

같은보기에 두 개의 UICollectionView가 있으면 어떻게됩니까? 나는이 방법을 사용하고 단지 부를 것이다 :

- (UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)cell 
                forIndexPath:(NSIndexPath *)indexPath; 

을 두 번 방법 및 상태 두 개의 서로 다른 재사용 식별자의 내 내가 원하는 방법을 활용?

제목과 마찬가지로 @required 메서드가 호출되는 이유는 무엇입니까? 그들은 모두 이런 종류의 패션에서 불려지나요?

도움 주셔서 감사합니다.

답변

2

asker 매개 변수는 해당 방법을 구현 한 클래스 인 delegate 인 컬렉션보기입니다. 기본적으로 연결된 xib로 Xcode에 UICollectionViewController를 만든 경우 UICollectionView가 뷰에 있고 대리자는 이미 설정되어 있습니다.

collectionView:cellForItemAtIndexPath: 메서드는 컬렉션 뷰에 지정된 인덱스 경로의 셀이 필요할 때마다 호출됩니다. 실제 구현은 private이지만, 셀이 표시 될 것으로 생각 될 때마다 (예 : 사용자가 스크롤하기 때문에) 호출되는 것으로 추론 할 수 있습니다. 물론 컬렉션보기가 처음 나타날 때 모든 보이는 셀이로드됩니다.

동일한 위임자와 함께 2 개의 콜렉션 뷰가있는 경우 asker 매개 변수를 등록 정보/ivars와 비교하여 어떤 콜렉션 뷰가 셀을 요청하고 재사용 식별자를 적절하게 설정해야하는지 파악해야합니다.

+0

감사합니다. Jeff! CollectionView가 처음에 뷰에 나타날 때 UICollectionViewDataSource 프로토콜 중 일부가 실행될 때 모든 메서드가 실행됩니까? 메서드의 numberOfSectionInCollectionView 및 - (NSInteger) collectionView : (UICollectionView *) collectionView numberOfItemsInSection : (NSInteger) 섹션? – Jonathan

+0

일반적으로 그렇습니다. 일부 로그 함수를 삭제하여 직접 테스트 할 수 있습니다. 순서는 확실히 기대하는 것입니다. 즉, numberOfSections 다음에 numberOfItemsInSection과 cellForIndexPath 등이오고 그 다음에 cellForIndexPath 등이옵니다. 일반적으로 셀의 렌더링은 필요할 때만 수행되도록 최적화되어 있기 때문에 뷰 계층 구조에서는 이상한 점이 있습니다. 또는 전환은 어쨌든 보이지 않기 때문에 즉시 * 셀을 요구하지 않을 수도 있습니다. – Jeff

관련 문제