Ich definierte eine einfache CollectionView-Ansicht,Kann Delegat Methoden nicht UIViews zuweisen?
Wenn ich die Delegate-Methoden in einem ViewController platzieren, werden die Zellen korrekt angezeigt. Wenn ich es jedoch in eine UIView verschoben habe, wird keine der Delegate-Methoden aufgerufen.
Wer weiß warum? Angehängt der Code.
Im Viewcontroller, viewDidLoad
Methode,
self.userGrid = [[UserGrid alloc] initWithFrame:self.view.frame];
UserGrid.h
#import <UIKit/UIKit.h>
#import "AvatarViewCell.h"
#import "GridViewLayout.h"
@interface UserGrid : UIView <UICollectionViewDelegate, UICollectionViewDataSource>
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@end
Und UserGrid.m
#import "UserGrid.h"
@implementation UserGrid
- (id)initWithFrame:(CGRect)aRect
{
UINib *cellNib = [UINib nibWithNibName:@"AvatarViewCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"avatarCell"];
if ((self = [super initWithFrame:aRect])) {
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.collectionView registerClass:[AvatarViewCell class] forCellWithReuseIdentifier:@"avatarCell"];
}
return self;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 12;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"avatarCell";
AvatarViewCell *avatarCell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
[avatarCell.avatarImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"website_%ld.jpg", indexPath.row + 1]]];
return avatarCell;
}
@end
** EDIT
I chang ed der Init-Teil (in viewDidLoad)
self.userGrid = [[[NSBundle mainBundle] loadNibNamed:@"UserGrid" owner:nil options:nil] lastObject];
self.userGrid.frame = self.view.frame;
Added in viewDidAppear,
- (void)viewDidAppear:(BOOL)animated {
[self.userGrid.collectionView reloadData];
}
Added awakeFromNib Methode, aber Delegatmethoden werden nicht genannt ... HMM
- (void)awakeFromNib {
UINib *cellNib = [UINib nibWithNibName:@"AvatarViewCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"avatarCell"];
NSLog(@"awake");
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.collectionView registerClass:[AvatarViewCell class] forCellWithReuseIdentifier:@"avatarCell"];
}
Überprüfen Sie, ob die Sammelansicht initialisiert ist oder nicht, wenn Sie delegieren –
@AhmadIshfaq Hmm, ich habe eine Xib-Datei, so ist es initialisiert .. sonst würde es nur crash ich denke ... – daisy
Setzen Sie einfach einen Haltepunkt und überprüfen, und wenn es nicht versuchen alle diese Anweisungen setzen in watchfromnib() Funktion –