web-dev-qa-db-ger.com

UICollectionView in UIView

Ich versuche, eine UICollectionView in einer UIView zu implementieren, aber ich kann nicht herausfinden, wie es geht. Es gibt viele Tutorials, wie UICollectionView mit einer UICollectionViewController verwendet wird, nicht jedoch, wie man eines in einer regulären Ansicht implementiert. Wie machen Sie das?

20

1) Ziehen Sie eine UICollectionView in Ihre UIView und passen Sie die Größe entsprechend an.

2) Erstellen Sie eine Eigenschaft, die auch eine IBOutlet in Ihrer .h-Datei für die Sammlungsansicht ist:

@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

3) Wieder in Ihrer .h-Datei deklarieren Sie Ihre Delegierten, daher sollte Ihr .h in etwa wie folgt aussehen:

@interface UtaQuickView : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate> {

}

@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

4) Verbinde deine myCollectionViewIBOutlet in deinem Storyboard.

5) (optional) Wenn Sie ein Ziel auswählen, das älter als iOS6 ist, synthetisieren Sie Ihre myCollectionView-Eigenschaft. Wenn Sie auf iOS6 abzielen, wird es automatisch für Sie synthetisiert. Dies gilt für alle Eigenschaften, nicht nur für UICollectionViews. In iOS6 müssen Sie also gar nicht @synthesize myCollectionView = _myCollectionViewen. Sie können _mycollectionview einfach überall verwenden, um auf die Eigenschaft zuzugreifen. 

6) Stellen Sie in Ihrer .m-Datei viewDidLoad Ihre delegate und dataSource. ein.

_myCollectionView.delegate = self;
_myCollectionView.dataSource = self;

7) Implementieren Sie die erforderlichen dataSource-Methoden:

#pragma mark - UICollectionView DataSource 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 

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

Von dort aus können Sie so viele oder so wenig der UICollectionViewDelegate-Methoden implementieren, wie Sie benötigen. Gemäß der Dokumentation sind jedoch 2 erforderlich: 

#pragma mark - UICollectionViewDelegate

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath

Es ist wichtig zu wissen, dass Sie <UICollectionViewDelegateFlowLayout> für <UICollectionViewDelegate> einsetzen können und trotzdem auf alle Methoden in <UICollectionViewDelegate> zugreifen können, da <UICollectionViewDelegateFlowLayout> eine Unterklasse von <UICollectionViewDelegate> ist. 

Dokumentation zum UICollectionViewDataSource-Protokoll

UICollectionViewDelegate-Protokolldokumentation

34
jhilgert00

Und die Swift-Version

  1. Ziehen Sie eine UICollectionView in Ihre UIView und passen Sie die Größe entsprechend an.

  2. Ändern Sie Ihren UIViewController, um UICollectionViewDataSource und UICollectionViewDelegate zu erweitern

  3. Implementieren Sie die erforderlichen Funktionen

  4. Ziehen Sie mit gedrückter Maustaste von Ihrem Storyboard in die Klasse, um eine Sammelansicht 'collectionView' zu erstellen.

  5. In viewDidLoad () verbinden Sie den Delegaten und die Datenquelle mit self collectionView.delegate = self und collectionView.dataSource = self.

Es sollte am Ende so aussehen:

    class CustomerViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
    {
        @IBOutlet weak var collectionView: UICollectionView!

        override func viewDidLoad() {
            collectionView.delegate = self
            collectionView.dataSource = self
        }

        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        }

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

        } 

        func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {

        }

        func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {

        }
    }
3
Michael Hudson

Ziehen Sie eine UICollectionView in Ihre UIView und passen Sie die Größe entsprechend an. Erstellen Sie eine Eigenschaft, die auch ein IBOutlet in Ihrer .h-Datei für die Sammlungsansicht ist:

@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

in UIView müssen Sie zuerst Ihre UICollectionView-Zelle in -(void)awakeFromNib deklarieren.

[myCollectionView registerNib:[UINib nibWithNibName:@"nib file of collectionView cell" bundle:nil] forCellWithReuseIdentifier:@"identifier"];

dann

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    custom class *cell1=[collectionView dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath];
    return cell1;        
}
2
Hilaj
  1. Ziehen Sie den Uiviewcontroller auf das Stroryboard.
  2. Erstellen Sie die neue Klassendatei für den neuen uiviewcontoller
  3. Setzen Sie die neu erstellte Klasse auf unseren Viewcontroller. Fügen Sie der .h-Datei Protokollmethoden hinzu. -UICollectionViewDelegate, UICollectionViewDataSource
  4. Ziehen Sie uicollectionview auf den Viewcontroller. Standardmäßig wird eine uicollectionviewcell mit der collectionview angezeigt.
  5. Erstellen Sie eine neue Klasse für die Zellanpassung als Unterklasse der uicollectionviewcell, und legen Sie die Klasse im Identitätsinspektor auf die Zelle fest. Legen Sie außerdem im Attribut-Inspektor einen Bezeichner für die Wiederverwendung fest, den wir zur Identifizierung der uicollectionviewcell angeben sollten. Sag hier Zelle.
  6. Ziehen Sie eine Bildansicht (kann nach Belieben sein) innerhalb der uicollectionviewcell und legen Sie sie in der Größe fest.
  7. Legen Sie ein Bild mit der Bildansicht fest (dieses Bild wird in der Sammlungsansicht wiederholt angezeigt).
  8. Stellen Sie den Delegaten und die Datenquelle mit der Uicollectionview auf den entsprechenden Viewcontroller ein.
  9. Legen Sie Datenquellenmethoden fest - numberOfItemsInSection und cellForItemAtIndexPath. 

  10. Gibt die erforderliche Zellenzahl mit der Methode numberOfItemsInSection zurück. Sag 10 hier.

  11. Gibt die Zelle zurück, die mit cellForItemAtIndexPath angezeigt werden soll. 

    NSString *  identifier = @"cell";
    CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    return cell;
    

Inzwischen sollte es Ihnen möglich sein, eine 10-Zellen-Sammlungsansicht zu sehen :)

1
Tony