2

私のプロジェクトには Collectionview があります... iPad と iPhone では正しく動作していますが、iPod では動作していません... iPod ID IOS7 のバージョンです。 .私のコードは次のとおりです

     _collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(-5, 0,       self.view.bounds.size.width, height) collectionViewLayout:layout];
    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];
    [_collectionView registerClass:[UICollectionViewCell class]    forCellWithReuseIdentifier:@"cellIdentifier"];
    [_collectionView setBackgroundColor:[UIColor whiteColor]];
    [_collectionView setShowsHorizontalScrollIndicator:NO];
    [_collectionView setShowsVerticalScrollIndicator:NO];

    [self.view addSubview:_collectionView];


     - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
     {
    return arrayMonths.count;
     }

// The cell that is returned must be retrieved from a call to - dequeueReusableCellWithReuseIdentifier:forIndexPath:
      - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
        {
        UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
       for(UIView *subview in [cell subviews]) {
        [subview removeFromSuperview];
       }
       MonthView *month=[arrayMonths objectAtIndex:indexPath.row];
       if ([month.strMonthName isEqualToString:@"February"]) {
        UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, -5, cell.frame.size.width, 40)];
        [label setText:[NSString stringWithFormat:@"%@ - %@",[[NSUserDefaults standardUserDefaults] valueForKey:@"KiCalName"],month.strYear]];
        label.textAlignment=NSTextAlignmentCenter;
        [label setFont:[UIFont fontWithName:@"AmericanTypewriter-Bold" size:12.0]];
        [cell addSubview:label];
        [month setFrame:CGRectMake(0, 35, month.frame.size.width, month.frame.size.height)];
        }else if([month.strMonthName isEqualToString:@"January"] || [month.strMonthName  isEqualToString:@"March"]){
        [month setFrame:CGRectMake(0, 35, month.frame.size.width, month.frame.size.height)];
        }
       [cell addSubview:month];
       [hud hide:YES];
       return cell;
        }

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    MonthView *monthOld=[arrayMonths objectAtIndex:indexPath.row];
    CGRect rectNew=CGRectMake(monthOld.frame.origin.x, monthOld.frame.origin.y, monthOld.frame.size.width+40, monthOld.frame.size.height+40);
    MonthView *month=[[MonthView alloc]initWithFrame:monthOld.frame andYear:monthOld.strYear andMonth:monthOld.strMonthName andNoOfDays:monthOld.noOfDays andArrayOffDays:monthOld.arrayOFF andArrayOnDays:monthOld.arrayONN];
    [month setBackgroundColor:[UIColor whiteColor]];
    UIView *view=[[UIView alloc]initWithFrame:rectNew];
    [view setBackgroundColor:[UIColor whiteColor]];
    [month setFrame:CGRectMake(20, 20, month.frame.size.width, month.frame.size.height)];
    [view addSubview:month];
    [[KGModal sharedInstance] setShowCloseButton:NO];
    [[KGModal sharedInstance] showWithContentView:view andAnimated:NO];
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{

    MonthView *month=[arrayMonths objectAtIndex:indexPath.row];
   NSLog(@"month name %@",month.strMonthName);
   NSLog(@"month %@",month);
   CGSize height;
   height=CGSizeMake(105, 155);
    if ([month.strMonthName isEqualToString:@"January"]) {
        height=CGSizeMake(105, 190);
        NSLog(@"called");
    }else if ([month.strMonthName isEqualToString:@"February"]){
        height=CGSizeMake(105, 190);
        NSLog(@"called");
    }else if ([month.strMonthName isEqualToString:@"March"]){
        height=CGSizeMake(105, 190);
        NSLog(@"called");
    }else{

    }
    return height;
}


-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 1;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 1;
}
4

1 に答える 1

2

問題は、セルをデキューしていることです。

UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

問題は、nil をチェックしていないことです..!!!

次の条件を使用します。

if(cell==nil)
{
//then alloc cell
}
于 2013-10-30T06:25:41.223 に答える