2012-10-24 8 views
5

私はUICollectionViewを持っていて、単にそれを表示したいだけです。デリゲートとデータソースは、インターフェイスビルダーのファイルの所有者にアタッチされています。collectionView:cellForItemAtIndexPath:決して呼び出されない

collectionView:numberOfItemsInSection: 

私は数時間のためにこれをいじってきたし、それを把握することはできません

...

すべてのヘルプは、事前のおかげで素晴らしいことです!

ここは完全な情報源です。ごめんなさい。

.hファイル

#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ファイル

#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 

答えて

2

私は同様の問題を抱えていました。 cellForItemAtIndexPathが呼び出されていませんでした。数分間毛を抜くと、メソッドからcollectionViewregisterClass:forCellWithReuseIdentifierが取り除かれました。

これを実行した後、cellForItemAtIndexPathが呼び出されるようになりました。

こちらがお役に立てば幸いです。

+1

それも私のためのトリックでした。奇妙なバグだった。 – AncientAnvil

2

私は同様の問題を抱えていたし、ここに私の解決策だった:

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

が呼び出されていませんでしたcollectionViewFlowLayoutの高さを理由itemSizeであった、あまりにも大きかったです。

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

高さを410に変更すると、cellForItemAtIndexPathが実行されます。

+0

保存した私の一日!どうも。 – Drux

1

セットアップのカスタムフローレイアウトクラスが間違っていて、問題を引き起こしていました。フローレイアウトに戻ってうまくいきました。

関連する問題