2012-12-22 5 views
10

사용자 정의 UICollectionViewCell을 구현 중이며 데이터를 사용하여 데이터를 셀의 서브 뷰를 초기화하는 데 사용할 수 있도록 알고 싶습니다.iOS Subclass UICollectionViewCell 사용자 정의 init 메소드

내가 수행하여 내 MyCollectionViewCell를 등록 ..

[self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"]; 

다음과 같은 방법

은, 내가 할 ...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

MyCollectionViewCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 

내가 직면 해요 문제, 때 셀 ISN ' t 재사용 대기열에서 initWithFrame 메소드를 호출하여 새 셀을 초기화합니다 (문서에서 확인해야 함). 그러나, 나는

-(id) initWithFrame:(CGRect)frame withData: (NSDictionary*) data; 

내가 대신 호출 할 내 사용자 정의 메소드를 초기화 싶어 ... 내 MyCollectionViewCell 클래스에서 사용자 지정 init 메소드가 있습니다. 내가 어떻게 그럴 수 있니? 나는 어떤 펜촉도 사용하지 않고 있으며 모든 것을 프로그래밍 방식으로 처리하고 있습니다.

아무런 방법이 없으면 대신 initWithFrame 메서드를 사용해야합니다. 그 데이터를 사용하여 하위 뷰를 초기화 할 수 있도록 모델 데이터를 MyCollectionViewCell에 전달할 수있는 방법은 무엇입니까?

감사합니다.

답변

6

dequeue 직후 [cell initData : data]는 어떨까요? 어쨌든 대기열에있는 셀의 데이터를 다시 초기화해야 할 수 있습니다.

+0

. 셀을 재사용하는 경우에는 initWith ... anything을 전달하지 않으므로 데이터를 설정하는 것이 init 메소드와 별개이어야합니다. – jrturton

+1

제외하고 initData라고하지 마십시오. configureForData 또는 setData (데이터가 속성 인 경우)를 호출합니다. init ... 메소드는 새로 할당 된 객체에서만 호출되어야합니다. – jrturton

+0

의미가 있습니다. setData를 호출하고 모델 데이터를 전달한 후 UI를 다시로드하기 위해 셀을 트리거하는 방법은 무엇입니까? setNeedsLayout을 호출하고 사용자 정의 셀에 - (void) layoutSubviews 메서드가 있습니까? –

0

또 다른 옵션은 layoutAttributes 객체에 데이터에 대한 포인터를 제공하고 셀이 applyLayoutAttributes : 메소드에서 가져 오는 것입니다.

관련 문제