2015-02-26 5 views
27

ich viele Tage versucht, dies zu realisieren: enter image description hereMehrere Kollektion in einem UIViewController - IOS swift

Ich möchte in meiner UIViewController zwei verschiedenen Collection hinzuzufügen. Zum Beispiel möchte ich Bilder in diese Sammlung setzen View Jede CollectionView verwenden eigene Bilder. Ist das möglich?

Ich werde sehr glücklich sein, wenn mir jemand helfen kann. :)

Antwort

71

Dies ist möglich, müssen Sie nur jede UICollectionView als Unteransicht hinzufügen und den Delegaten und die dataSource für Ihren UIViewController festlegen.

Hier ist ein kurzes Beispiel. Angenommen, Sie sind ein UICollectionView Arbeits haben, sollten Sie diesen Code auf Ihre eigenen Anwendungen anpassen können eine zweite ziemlich leicht hinzuzufügen:

let collectionViewA = UICollectionView() 
let collectionViewB = UICollectionView() 
let collectionViewAIdentifier = "CollectionViewACell" 
let collectionViewBIdentifier = "CollectionViewBCell" 

override func viewDidLoad() { 
    // Initialize the collection views, set the desired frames 
    collectionViewA.delegate = self 
    collectionViewB.delegate = self 

    collectionViewA.dataSource = self 
    collectionViewB.dataSource = self 

    self.view.addSubview(collectionViewA) 
    self.view.addSubview(collectionViewB) 
} 

Im cellForItemAtIndexPath Delegatfunktion:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if collectionView == self.collectionViewA { 
     let cellA = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewAIdentifier) as UICollectionViewCell 

     // Set up cell 
     return cellA 
    } 

    else { 
     let cellB = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewBIdentifier) as UICollectionViewCell 

     // ...Set up cell 

     return cellB 
    } 
} 

In der numberOfItemsInSection Funktion :

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    if collectionView == self.collectionViewA { 
     return 0 // Replace with count of your data for collectionViewA 
    } 

    return 0 // Replace with count of your data for collectionViewB 
} 
+0

Ich bekomme diesen Fehler "UICollectionView muss mit einem non-nil-Layout-Parameter initialisiert werden" in dieser Zeile "lass collectionViewA = UICollectionView()" – dennis

+1

es funktioniert nicht für mich! Ich habe diesen Fehler erhalten: *** Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: 'UICollectionView muss mit einem Nicht-Null-Layout-Parameter initialisiert werden' –

5

Ja - das ist durchaus möglich. Sie können entweder ihr jeweiliges UICollectionViewDelegates/UICollectionViewDataSources verschiedene Klassen zuordnen oder die CollectionViews Unterklasse, sowohl die Delegierten und Datenquelle zu Ihrem aktuellen Viewcontroller zuweisen und niedergeschlagene Ihre Referenz Collection in den Delegations Methoden wie so:

@IBOutlet collectionViewA: CustomCollectionViewA! 
@IBOutlet collectionViewB: CustomCollectionViewB! 


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    if let a = collectionView as? CustomCollectionViewA { 
     return a.dequeueReusableCellWithIdentifier("reuseIdentifierA", forIndexPath: indexPath) 
    } else { 
     return collectionView.dequeueReusableCellWithIdentifier("reuseIdentifierB", forIndexPath: indexPath)  
    } 
} 
+0

Was meinen Sie mit "Unterklasse der CollectionViews"? Ich habe es nicht geschafft, das zu tun, was du sagst. – Damasio

1

schaffen Auslässe für entsprechende collectionviews: Auslässen:

@IBOutlet weak var collectionView: UICollectionView! 

@IBOutlet weak var SecondCollectioView: UICollectionView! 

Methode:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as UICollectionViewCell 

    if(collectionView == self.SecondCollectioView) { 
     cell.backgroundColor = UIColor.black 
    } else { 
     cell.backgroundColor = self.randomColor() 
    } 

    return cell; 
} 

Dies ist wird eine andere Art und Weise sein.