2013-08-22 46 views

Trả lời

24

Tôi chưa từng sử dụng UICollectionView trước đây, nhưng vì nó được kế thừa từ UIScrollView, tôi đang dùng cơ hội khá giống với UITableView.

Khi sử dụng một CollectionView, tôi giả sử bạn đã thiết lập collectionView.delegate = self;collectionView.dataSource = self, và trong .h -file, đảm bảo lớp học của bạn đang sử dụng <UICollectionViewDelegate, UICollectionViewDataSource> hoặc một cái gì đó tương tự. Khi bạn thiết lập ủy nhiệm của collectionView cho chế độ xem của riêng bạn (self), bạn đang đảm bảo rằng dữ liệu được cung cấp cho collectionView đến từ lớp của riêng bạn, trong các phương thức ủy nhiệm. Tôi chắc rằng bạn đã biết điều này, vì nó nên được khá thẳng về phía trước với một collectionView duy nhất.

Khi bạn đang sử dụng hai collectionViews, sau đó bạn phải thiết lập

collection1.delegate = self; 
collection2.delegate = self; 
collection1.dataSource = self; 
collection2.dataSource = self; 

Điều này sẽ lần lượt làm như vậy mà cả hai collectionViews sẽ gọi các phương pháp đại biểu. Ví dụ, phương thức ủy nhiệm -collectionView:cellForItemAtIndexPath: sẽ được gọi hai lần. Một lần cho collection1, và một lần cho collection2.

Để đảm bảo họ nhận được dữ liệu chính xác gửi đến chúng, bạn nên tạo một kiểm tra đơn giản trong đầu mỗi đại biểu và nguồn dữ liệu phương pháp, như thế này:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(collectionView == collection1) 
    { 
     //return cell for collection1 
    } 
    else 
    { 
     //return cell for collection2 
    } 
} 

Ở đây, tôi đang kiểm tra nếu collectionView bằng collection1 hoặc collection2. Các phương thức ủy nhiệm đang cung cấp collectionView làm UICollectionView nó đang gọi phương thức cho, và đó phải là một trong hai phương thức. Điều này có thể trông đáng ngờ nếu bạn đã gọi một trong các bộ sưu tập của mình cho collectionView, vì vậy hãy đảm bảo đặt tên cho chúng một cách hợp lý.

+0

Bạn sẽ muốn thay đổi 'if (collectionView == collection1)' thành 'if ([collectionView isEqual: collection1])' để kiểm tra tính bình đẳng cho đúng. –

+2

Không, == là chính xác (bạn đang kiểm tra xem hai con trỏ có trỏ đến cùng một thứ) – HughHughTeotl