uicollectionview滚动更改单元格索引路径

时间:2015-01-26 10:35:33

标签: ios objective-c uicollectionview nsindexpath

我尝试使用uiclloectionview创建周历。这是视图聚焦时的样子:

original view 当我滚动到底部并滚动回顶部。那些由于滚动而消失的细胞改变了文本。 scrolled view

这是我的代码:

@interface ViewController ()

@end

@implementation ViewController
@synthesize calendar;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //[self.calendar setCollectionViewLayout:[[CalendarFlowLayout alloc]init]];
    timeline = [NSArray arrayWithObjects:@"8:00", @"9:00",@"10:00",@"11:00",@"12:00",@"13:00",@"14:00",@"15:00",@"16:00",@"17:00",@"18:00",@"19:00",@"20:00",@"21:00",@"22:00",nil];
    weekline=[NSArray arrayWithObjects:@"Mon", @"Tue",@"Wen",@"Thr",@"Fri",@"Sat",@"Sun",nil];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 128;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

    if (![cell.contentView viewWithTag:2]) {
        UILabel * title;
        UIView *message;
        title =[[UILabel alloc]initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height)];
        title.font=[UIFont systemFontOfSize:14.0];
        title.textAlignment=NSTextAlignmentCenter;
        //title.backgroundColor=[UIColor redColor];
        if (indexPath.row%8==0) {
            int time =indexPath.row/8;
            if (time<[timeline count]) {
                title.text =[NSString stringWithFormat:@"%@",[timeline objectAtIndex:time]];
            }
        }else if(indexPath.row>0&&indexPath.row<8){
            if (indexPath.row<[weekline count]+1) {
                title.text =[NSString stringWithFormat:@"%@",[weekline objectAtIndex:indexPath.row-1]];
            }
            [cell.layer setBorderColor:[UIColor blackColor].CGColor];
            [cell.layer setBorderWidth:1.0f];
        }else{
            [cell.layer setBorderColor:[UIColor blackColor].CGColor];
            [cell.layer setBorderWidth:1.0f];
        }
        title.textColor=[UIColor blackColor];
        message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
        message.tag = 2;
        message.backgroundColor =[UIColor clearColor];
        [message addSubview:title];

        [cell.contentView addSubview:message];
    }



    return cell;

}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    CGFloat width =[[UIScreen mainScreen]bounds].size.width/8;

    return CGSizeMake(width, width);
}
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    return UIEdgeInsetsMake(0, 0, 0, 0);
}
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
    return 0.0;
}
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
    return 0.0;
}
@end

我只是想知道为什么indexpath会不断变化以及如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:3)

如果单元格没有message UIView(标记2),则只配置单元格 - 因此当重复使用单元格时,您只需返回它们之前配置的单元格 - 但是不能保证单元格在以前的indexPath中重复使用 - 事实上,你几乎可以保证它不会被赢得。

您需要每次都正确配置您的手机。如果您在故事板中配置原型单元格,或者如果您不想这样做,则会更容易创建添加UICollectionViewCelltitle控件的message子类在其init方法中。