2016-05-07 10 views
0

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"]; 
} 
+0

Überprüfen Sie, ob die Sammelansicht initialisiert ist oder nicht, wenn Sie delegieren –

+0

@AhmadIshfaq Hmm, ich habe eine Xib-Datei, so ist es initialisiert .. sonst würde es nur crash ich denke ... – daisy

+0

Setzen Sie einfach einen Haltepunkt und überprüfen, und wenn es nicht versuchen alle diese Anweisungen setzen in watchfromnib() Funktion –

Antwort

1

Initialize UserGrid-Ansicht wie folgt

self.userGrid=[[[NSBundle mainBundle] loadNibNamed:@"yourxibName" owner:nil options:nil] lastObject]; 
    self.userGrid.frame=self.view.frame; 

Sie haben ein IBOutlet von collectionview, aber haben die Ansicht nicht an Ihre Klasse angehängt, so dass die Auflistung nicht initialisiert wird.

+0

Danke, es ist geladen, aber Delegate Methoden immer noch nicht funktioniert. sehen Sie die Edit Teil .. – daisy

+0

in der Steuerung in viewdidappear versuchen Sie einfach eine Sammlung view reload funktioniert es –

+0

Hmm reloadData funktioniert nicht ... – daisy