iOS collectionView的使用

吴凯
2023-12-01
#pragma mark - 
#pragma mark 创建collectionView

- (UICollectionView *)collectionView {
    if (!_collectionView) {
        //确定是水平滚动,还是垂直滚动
        UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init];
        [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
        self.collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 64, width(self.view.frame), height(self.view.frame) - 64 - 60*KScDefineWidth) collectionViewLayout:flowLayout];
        self.collectionView.dataSource=self;
        self.collectionView.delegate=self;
        [self.collectionView setBackgroundColor:[UIColor clearColor]];
        //注册Cell,必须要有
        [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"];
        
        [self.view addSubview:self.collectionView];
    }
    return _collectionView;
}

- (void)initRefresh {
    MJRefreshNormalHeader *refreshHeader = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [self loadAfterLoginData:NO];
    }];
    self.collectionView.header = refreshHeader;
    //        [self.tableView.header beginRefreshing];
    MJRefreshBackNormalFooter *refreshFooter = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        [self loadAfterLoginData:YES];
    }];
    self.collectionView.footer = refreshFooter;
    [self loadAfterLoginData:NO];
}


#pragma mark -- UICollectionViewDataSource

//定义展示的UICollectionViewCell的个数
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.dataSourceArray.count;
}

//定义展示的Section的个数
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

//每个UICollectionView展示的内容
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * CellIdentifier = @"UICollectionViewCell";
    UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    pictureModel *model = _dataSourceArray[indexPath.row];
    NSString *picUrl = [NSString stringWithFormat:ImageUrlAll,model.path];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.bounds];
    [imageView sd_setImageWithURL:[NSURL URLWithString:picUrl] placeholderImage:[UIImage imageNamed:@"moren"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        
    }];
    UIImageView *flagImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30*KScDefineWidth, 30*KScDefineWidth)];
    if ([model.status integerValue] == 0) {
        flagImageView.image = [UIImage imageNamed:@"pic_status_0"];
    }else {
        if ([model.review integerValue] == 1) {
            flagImageView.image = [UIImage imageNamed:@"pic_status_2"];
        }else {
            flagImageView.image = [UIImage imageNamed:@"pic_status_1"];
        }
    }
    [imageView addSubview:flagImageView];
    for (id subView in cell.contentView.subviews) {
        [subView removeFromSuperview];
    }
    [cell.contentView addSubview:imageView];
    return cell;
}

#pragma mark --UICollectionViewDelegateFlowLayout

//定义每个Item 的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(ImageWidth*KScDefineWidth + 9*KScDefineWidth, ImageWidth*KScDefineWidth + 9*KScDefineWidth);
}

//定义每个UICollectionView 的 margin
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(5*KScDefineWidth, 5, 5*KScDefineWidth, 5);
}

#pragma mark --UICollectionViewDelegate

//UICollectionView被选中时调用的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
       [self.imageUrlArray removeAllObjects];
    UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
    //临时改变个颜色,看好,只是临时改变的。如果要永久改变,可以先改数据源,然后在cellForItemAtIndexPath中控制。(和UITableView差不多吧!O(∩_∩)O~)
    cell.backgroundColor = [UIColor greenColor];
    NSLog(@"item======%ld",indexPath.item);
    NSLog(@"row=======%ld",indexPath.row);
    NSLog(@"section===%ld",indexPath.section);
    MHPhotoBrowserController *vc = [MHPhotoBrowserController new];
    vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    vc.currentImgIndex = (int)indexPath.row;
    vc.displayTopPage = YES;
    vc.displayDeleteBtn = YES;
    for (int i = 0; i < self.dataSourceArray.count; i++) {
        pictureModel *model = _dataSourceArray[i];
        NSString *picUrl = [NSString stringWithFormat:ImageUrlAll,model.path];
        [self.imageUrlArray addObject:[MHPhotoModel photoWithURL:[NSURL URLWithString:picUrl]]];
    }
    pictureModel *model = _dataSourceArray[indexPath.row];
    [[NSUserDefaults standardUserDefaults] setObject:model.status forKey:@"imageStatus"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [[NSUserDefaults standardUserDefaults] setObject:model.modelID forKey:@"imagePid"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    vc.imgArray = self.imageUrlArray;
    [self.navigationController presentViewController:vc animated:YES completion:nil];
    NSDictionary *dict =[[NSDictionary alloc] initWithObjectsAndKeys:self.dataSourceArray,@"singleItemDelete", nil];
    //创建通知
    NSNotification *notification =[NSNotification notificationWithName:@"singleItemDelete" object:nil userInfo:dict];
    //通过通知中心发送通知
    [[NSNotificationCenter defaultCenter] postNotification:notification];

}

- (NSMutableArray *)imageUrlArray {
    if (!_imageUrlArray) {
        self.imageUrlArray = [NSMutableArray new];
    }
    return _imageUrlArray;
}

//返回这个UICollectionView是否可以被选择
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

// 设置最小行间距,也就是前一行与后一行的中间最小间隔
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 5;
}

// 设置最小列间距,也就是左行与右一行的中间最小间隔
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 5;
}

 类似资料: