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?
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 myCollectionView
IBOutlet
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 = _myCollectionView
en. 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.
Und die Swift-Version
Ziehen Sie eine UICollectionView in Ihre UIView und passen Sie die Größe entsprechend an.
Ändern Sie Ihren UIViewController, um UICollectionViewDataSource und UICollectionViewDelegate zu erweitern
Implementieren Sie die erforderlichen Funktionen
Ziehen Sie mit gedrückter Maustaste von Ihrem Storyboard in die Klasse, um eine Sammelansicht 'collectionView' zu erstellen.
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) {
}
}
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;
}
Legen Sie Datenquellenmethoden fest - numberOfItemsInSection und cellForItemAtIndexPath.
Gibt die erforderliche Zellenzahl mit der Methode numberOfItemsInSection zurück. Sag 10 hier.
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 :)