2012-10-24 16 views
5

Mam UICollectionView i po prostu chcę go pokazać. Mam delegata i źródło danych dołączone do właściciela pliku w konstruktorze interfejsu.collectionView: cellForItemAtIndexPath: nigdy nie zostanie wywołany

collectionView:numberOfItemsInSection: 

Pobiera się nazywane dobrze.

I zostały aprowizacji z tym przez kilka godzin i po prostu nie mogę tego rozgryźć ...

Każda pomoc będzie wielki, Z góry dzięki!

Oto pełne źródło. Przepraszam, jeśli to trochę nieładne.

.h plików

#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 

.m plik

#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 

Odpowiedz

2

miałem podobny problem. cellForItemAtIndexPath nie był wywoływany. Po wyciągnięciu włosów na kilka minut, usunąłem metodę collectionViewregisterClass:forCellWithReuseIdentifier.

Po wykonaniu tej czynności, cellForItemAtIndexPath zaczęło być wywoływane.

Mam nadzieję, że to pomoże.

+1

To też mnie poruszyło. Dziwny błąd, który był. – AncientAnvil

2

miałem podobny problem i tutaj było moje rozwiązanie:

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

nie był nazywany był ze względu na itemSize dla height collectionViewFlowLayout był zbyt duży.

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

Jeśli zmienię wysokość na 410, uruchomi się funkcja cellForItemAtIndexPath.

+0

Uratowałem mój dzień! Dzięki. – Drux

1

Znalazłem, że miałem niewłaściwą konfigurację niestandardowej klasy układu przepływu, powodując problemy. Przywrócono układ Flow i działało dobrze.

Powiązane problemy