2012-10-24 20 views
5

Ho un UICollectionView e voglio semplicemente che venga visualizzato. Ho il delegato e l'origine dati collegati al proprietario del file nel generatore di interfacce.collectionView: cellForItemAtIndexPath: mai chiamato

collectionView:numberOfItemsInSection: 

Viene chiamato bene.

ho pasticciano con questo per un paio d'ore e proprio non riesco a capirlo ...

Qualsiasi aiuto sarebbe grande, Grazie in anticipo!

Ecco la fonte completa. Scusa se è un po 'disordinato.

.h File

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import "PinAnnotation.h" 

#import "Jot.h" 

@interface JotCardViewController : UIViewController <MKMapViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> 

@property (nonatomic,strong) Jot* jot; 

@end 

di file .m

#import "JotCardViewController.h" 

#import "JotViewController.h" 

#import <QuartzCore/QuartzCore.h> 

@interface JotCardViewController() 

@property (nonatomic,strong) JotViewController *detailViewController; 
@property (nonatomic,strong) IBOutlet UIView *cardFrontView; 
@property (nonatomic,assign,getter = isFlipped) BOOL flipped; 
@property (nonatomic,weak) IBOutlet MKMapView *mapView; 
@property (nonatomic,strong) IBOutlet UICollectionView *collectionView; 

@property (nonatomic,weak) IBOutlet UILabel *jotTitle; 
@property (nonatomic,weak) IBOutlet UILabel *jotDate; 
@property (nonatomic,weak) IBOutlet UILabel *sunriseSunsetDelta; 
@property (nonatomic,weak) IBOutlet UILabel *jotNotes; 

@end 

@implementation JotCardViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    [[self mapView] setRegion:MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake([self.jot.latitude floatValue], [self.jot.longitude floatValue]), 1000, 1000)]; 
    //TODO: if there is no jot location - say that their isn't (maybe text over the map display) 
    CLLocation *tempLocation = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake([self.jot.latitude doubleValue], [self.jot.longitude doubleValue]) altitude:0 horizontalAccuracy:0 verticalAccuracy:0 timestamp:nil]; 
    [self dropPin:tempLocation]; 


    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"]; 


    [self.collectionView reloadData]; 
} 

- (void) viewWillAppear:(BOOL)animated 
{ 
    [self refreshUIFromJot]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)flipToDetails:(id)sender 
{ 
    if (![self isFlipped]) { 
     if (!self.detailViewController) { 
      JotViewController *jotViewController = [[JotViewController alloc] initWithNibName:@"JotView" bundle:[NSBundle mainBundle]]; 
      jotViewController.jot = self.jot; 
      self.detailViewController = jotViewController; 
      self.detailViewController.view.frame = self.cardFrontView.frame; 
      self.detailViewController.view.layer.cornerRadius = 10.0; 
     } 

     [UIView transitionFromView:self.cardFrontView toView:self.detailViewController.view duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) { 
      [self setFlipped:YES]; 
     }]; 
    } else { 
     [UIView transitionFromView:self.detailViewController.view toView:self.cardFrontView duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) { 
      [self setFlipped:NO]; 
     }]; 
    } 
} 

- (void) setJot:(Jot *) jot { 
    _jot = jot; 
    [self refreshUIFromJot]; 
} 

- (void) refreshUIFromJot 
{ 
    [[self jotTitle] setText:self.jot.summary]; 
    [[self jotDate] setText:self.jot.recorddate]; 
    [[self jotNotes] setText:self.jot.note]; 
    [[self sunriseSunsetDelta] setText:@""]; 
} 

-(void) dropPin: (CLLocation*)newLocation{ 

    for (id<MKAnnotation> pin in self.mapView.annotations){ 
     MKAnnotationView* anView = [self.mapView viewForAnnotation: pin]; 
     if (anView){ 
      [self.mapView removeAnnotation:pin]; 
      NSLog(@"Pin removed"); 
     } 
    } 

    PinAnnotation *pin = [[PinAnnotation alloc] initWithCoordinates:newLocation.coordinate placeName:nil description:nil]; 
    [self.mapView addAnnotation:pin]; 


} 

#pragma mark - MKMapViewDelegate methods 

- (void) mapViewDidFinishLoadingMap:(MKMapView *)mapView 
{ 
    NSLog(@"Map!"); 
} 

#pragma mark - UICollectionView DataSource 

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 
{ 
    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 
    //cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]]; 
    return cell; 

    //### 
    /* 
    NSSet *jotImages = self.jot.images; 
    NSSortDescriptor *imageNameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"imageName" ascending:YES]; 
    NSArray *sortedJotImages = [jotImages sortedArrayUsingDescriptors:@[imageNameDescriptor]]; 
    */ 
    //### 
} 


#pragma mark - UICollectionViewDelegate 
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // TODO: Select Item 
} 
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath { 
    // TODO: Deselect item 
} 

#pragma mark – UICollectionViewDelegateFlowLayout 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize retval = CGSizeMake(100, 100); 
    return retval; 
} 

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(50, 20, 50, 20); 
} 

@end 

risposta

2

ho avuto un problema simile. cellForItemAtIndexPath non è stato chiamato. Dopo aver estratto i capelli per diversi minuti, ho rimosso lo collectionViewregisterClass:forCellWithReuseIdentifier dal metodo viewDidLoad.

Dopo aver fatto ciò, cellForItemAtIndexPath ha iniziato a essere chiamato.

Spero che questo aiuti.

+1

Questo ha fatto il trucco anche per me. Strano bug che era – AncientAnvil

2

Ho avuto un problema simile e qui è stata la mia soluzione:

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

non era stato chiamato è stato a causa della ItemSize per l'altezza del collectionViewFlowLayout era troppo grande.

[self.myCollectionViewFlowLayout setItemSize:CGSizeMake(320, 548)]; 

Se cambio l'altezza a 410, esso verrà eseguito cellForItemAtIndexPath.

+0

Salvato la mia giornata! Grazie. – Drux

1

Ho trovato una classe di layout del flusso personalizzato di installazione errata che mi ha causato problemi. Reverted to Flow layout e ha funzionato bene.

Problemi correlati