2013-08-22 8 views
9

Sonuç, bir görünüm denetleyicisinde 2 koleksiyon görünümüne sahip olmaktır. Her ikisi de farklı kaynaklardan çekilirken, diğeri yatay olarak diğeri ise dikey olarak kaydırılmalıdır.Bir Viewcontroller'a iki CollectionViews nasıl eklerim?

Lütfen bu programın nasıl gerçekleştirileceği konusunda öneride bulunun.

cevap

24

Daha önce UICollectionView kullanmamıştım, ancak UIScrollView'dan miras aldığı için, UITableView'a oldukça benzer.

bir CollectionView'ın kullanarak, sana collectionView.delegate = self; ve collectionView.dataSource = self, ayarlamak varsayarak yaşıyorum ve .h -Dosya içinde, sınıf benzer <UICollectionViewDelegate, UICollectionViewDataSource> falan kullandığından emin olun. CollectionView öğesinin temsilcisini kendi görünümünüze (self) ayarlarken, collectionView için sağlanan verilerin delege yöntemlerinde kendi sınıfınızdan geldiğinden emin olursunuz. Eminim bunu zaten biliyorsunuz, çünkü bu tek bir koleksiyon ile oldukça basit bir şekilde ileriye dönük olmalıdır. İki CollectionViews kullanırken

, o zaman

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

böylece hem CollectionViews temsilci yöntemleri arayacak bunu sırayla Bu irade ayarlamak gerekir. Örneğin, -collectionView:cellForItemAtIndexPath: delegesi yöntemi iki kez çağrılır. Bir kez koleksiyon1 için ve bir kez koleksiyon2 için.

kendilerine gönderilen doğru veri elde emin olmak için, bu gibi her temsilci ve dataSource yönteminin başında basit bir çek oluşturmalıdır:

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

İşte, collectionView eğer kontrol ediyorum collection1 veya collection2'a eşittir. Delege yöntemleri, yöntemi çağırdığı UICollectionView olarak sağlar ve bu ikisinden biri olmalıdır. collectionView için koleksiyonunuzdan birini çağırdıysanız, bu durum şüpheli görünebilir. Bu nedenle, bunları mantıksal olarak adlandırdığınızdan emin olun.

+0

Sen 'değiştirmek isteyeyim eğer (CollectionView'ın == collection1)' 'if ([CollectionView'ın IsEqual: collection1])' düzgün olsa, eşitlik için test etmek. –

+2

Hayır, == doğru (iki işaretçinin aynı şeyle işaret edip etmediğini görmek için test ediyorsunuz) – HughHughTeotl