collectionView:cellForItemAtIndexPath:永远不会被调用

我有一个UICollectionView,我只是希望它出现。 我在接口构建器中将委托和数据源附加到文件的所有者。

collectionView:numberOfItemsInSection: 

获得调用就好了。

我一直在搞乱这几个小时,只是想不出来……

任何帮助都会很棒,提前谢谢!

这是完整的来源。 对不起,如果它有点凌乱。

.h文件

 #import  #import  #import "PinAnnotation.h" #import "Jot.h" @interface JotCardViewController : UIViewController  @property (nonatomic,strong) Jot* jot; @end 

.m文件

 #import "JotCardViewController.h" #import "JotViewController.h" #import  @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 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 

我遇到了类似的问题。 未调用cellForItemAtIndexPath 。 拔出头发几分钟后,我从viewDidLoad方法中删除了collectionView registerClass:forCellWithReuseIdentifier

在这之后, cellForItemAtIndexPath开始被调用。

我希望这有帮助。

我有类似的问题,这是我的解决方案:

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

没有被调用是因为collectionViewFlowLayout的itemSize的高度太大了。

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

如果我将高度更改为410,它将执行cellForItemAtIndexPath。

我发现我有一个错误的设置自定义流布局类导致我的问题。 恢复到Flow布局,它工作正常。