2012-12-22 28 views
10

Tôi đang triển khai UICollectionViewCell tùy chỉnh và tôi muốn biết cách gửi dữ liệu mô hình đến đó để dữ liệu có thể được sử dụng để khởi tạo các bản xem trước của ô.iOS Subclass UICollectionViewCell phương thức init tùy chỉnh

tôi đăng ký MyCollectionViewCell của tôi bằng cách làm ..

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

và trong phương pháp sau đây, tôi làm ...

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

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

Vấn đề tôi đang phải đối mặt là, khi một tế bào isn' Trong hàng đợi tái sử dụng, nó khởi tạo một ô mới bằng cách gọi phương thức initWithFrame (mà tài liệu xác nhận sẽ xảy ra). Tuy nhiên, tôi có phương thức init tùy chỉnh trong lớp MyCollectionViewCell của tôi, là ...

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

Tôi muốn phương thức khởi tạo tùy chỉnh của tôi được gọi thay thế. Tôi sẽ làm như thế nào? Tôi không sử dụng bất kỳ ngòi và tôi đang làm tất cả mọi thứ lập trình.

Nếu không có cách nào, và tôi phải sử dụng phương pháp initWithFrame thay vào đó, làm cách nào khác để chuyển dữ liệu mô hình đến MyCollectionViewCell để tôi có thể khởi tạo các bản xem trước với dữ liệu đó?

Cảm ơn!

Trả lời

6

Làm thế nào về [cell initData: data] ngay sau khi bạn dequeue nó? Tuy nhiên, bạn có thể cần phải khởi tạo lại dữ liệu trên các ô bị khử.

+0

Điều này. Nếu bạn đang tái sử dụng một tế bào, bạn sẽ không vượt qua initWith ... bất cứ điều gì với nó, do đó, thiết lập các dữ liệu nên được tách biệt với phương pháp init. – jrturton

+1

Ngoại trừ, không gọi nó là initData. Gọi nó là configureForData hoặc setData (nếu dữ liệu là thuộc tính). init ... phương thức chỉ nên được gọi trên các đối tượng mới được phân bổ. – jrturton

+0

Điều đó có ý nghĩa. Sau khi tôi gọi setData và chuyển vào dữ liệu mô hình của mình, làm cách nào để kích hoạt ô để tải lại 'UI? Tôi có gọi setNeedsLayout và có phương thức layoutSubviews - (void) trong ô tùy chỉnh của tôi không? –

0

Một tùy chọn khác là cung cấp cho đối tượng layoutAttributes của bạn một con trỏ tới dữ liệu và để ô lấy nó từ đó trong phương thức applyLayoutAttributes: của nó.

Các vấn đề liên quan