• UICollectionView的使用小记录和一些说明


    //
    //  MallTestViewController.h
    //  fitmiss
    //
    //  Created by bill on 16/6/28.
    //  Copyright © 2016年 lear. All rights reserved.
    //
    
    #import "RootViewController.h"
    
    @interface MallTestViewController : RootViewController
    
    @end
    //
    //  MallTestViewController.m
    //  fitmiss
    //
    //  Created by bill on 16/6/28.
    //  Copyright © 2016年 lear. All rights reserved.
    //
    
    #import "MallTestViewController.h"
    
    // 注意const的位置
    static NSString *const cellId = @"cellId";
    static NSString *const headerId = @"headerId";
    static NSString *const footerId = @"footerId";
    
    @interface MallTestViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
    
    @end
    
    @implementation MallTestViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    
        UICollectionView *colView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, [Function getScreenWidth], [Function getScreenHeight:self]) collectionViewLayout:layout];
        colView.backgroundColor = [UIColor grayColor];
        colView.dataSource = self;
        colView.delegate = self;
        [self.view addSubview:colView];
        
        // 注册cell、sectionHeader、sectionFooter
        [colView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellId];
        [colView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerId];
        [colView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerId];
        
    }
    
    - (NSArray *)loadData
    {
        NSArray *arr = [NSArray arrayWithObjects:@"cell", @"cell2", @"cell3", @"cell4", @"cell5", @"cell6", @"cell7", @"cell8", @"cell9",nil];
        return arr;
    }
    
    #pragma mark - UICollectionViewDataSource
    // 定义展示的Section的个数
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
    {
        return 2;
    }
    
    // 定义每个 UICollectionView 中展示的 UICollectionViewCell 的个数
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
    {
        return [[self loadData] count];
    }
    
    // 每个 UICollectionView 展示的内容
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
        cell.backgroundColor = [UIColor redColor];
        return cell;
    }
    
    // 设置 UICollectionView 的段头段尾内容,和UITableView类似
    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    {
        
        if([kind isEqualToString:UICollectionElementKindSectionHeader])
        {
            UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:headerId forIndexPath:indexPath];
            if(headerView == nil)
            {
                headerView = [[UICollectionReusableView alloc] init];
            }
            headerView.backgroundColor = [UIColor whiteColor];
            
            return headerView;
        }
        else if([kind isEqualToString:UICollectionElementKindSectionFooter])
        {
            UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:footerId forIndexPath:indexPath];
            if(footerView == nil)
            {
                footerView = [[UICollectionReusableView alloc] init];
            }
            footerView.backgroundColor = [UIColor lightGrayColor];
            
            return footerView;
        }
        
        return nil;
    }
    
    // 是否可移动
    - (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    
    // 处理移动
    - (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath
    {
        
    }
    
    #pragma mark - UICollectionViewDelegateFlowLayout
    
    // 定义 UICollectionView 中 cell 的尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.section == 0) {
            return CGSizeMake(310, 80);
        }
        return CGSizeMake(120, 150);
    }
    
    // 定义 UICollectionView 的 margin
    -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
    {
        return UIEdgeInsetsMake(5, 5, 5, 5);
    }
    
    // 定义 UICollectionView 中上下两个 cell 的最小间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
    {
        return 5.f;
    }
    
    // 定义 UICollectionView 中左右两个 cell 的最小间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
    {
        return 5.f;
    }
    
    // 定义 UICollectionView 头部的尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
        if (section==0) {
            return CGSizeMake(0, 0);
        }
        return CGSizeMake(100, 30);
    }
    
    // 定义 UICollectionView 尾部的尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
    {
        return CGSizeMake(300, 44);
    }
    
    
    #pragma mark - UICollectionViewDelegate
    
    // UICollectionView被选中时调用的方法
    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {
        
        NSLog(@"您点击了item:%@", [[self loadData] objectAtIndex:indexPath.row]);
        UICollectionViewCell *cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
        //cell.backgroundColor = [UIColor whiteColor];
    
    }
    
    
    // 返回这个UICollectionView是否可以被选择
    -(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    //    if (indexPath.row % 2)
    //    {
    //        return YES;
    //    }
    //    return NO;
    }
    
    // 开启突出某个内容
    - (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    
    // 按下时处理内容 如:变色
    - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
    {
        UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
        cell.backgroundColor = [UIColor blueColor];
    }
    
    // 松开时处理内容 如:变色
    - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath
    {
        UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
        cell.backgroundColor = [UIColor greenColor];
    }
    
    // 长按某item,弹出copy和paste的菜单
    - (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES;
    }
    
    // 使copy和paste有效
    - (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender
    {
        if ([NSStringFromSelector(action) isEqualToString:@"copy:"] || [NSStringFromSelector(action) isEqualToString:@"paste:"])
        {
            return YES;
        }
        
        return NO;
    }
    
    //处理copy和paste
    - (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender
    {
        
    //    if([NSStringFromSelector(action) isEqualToString:@"copy:"])
    //    {
    //        //        NSLog(@"-------------执行拷贝-------------");
    //        [collectionView performBatchUpdates:^{
    //            [_section0Array removeObjectAtIndex:indexPath.row];
    //            [collectionView deleteItemsAtIndexPaths:@[indexPath]];
    //        } completion:nil];
    //    }
    //    else if([NSStringFromSelector(action) isEqualToString:@"paste:"])
    //    {
    //        NSLog(@"-------------执行粘贴-------------");
    //    }
    }
    
    @end
  • 相关阅读:
    docker curl: (56) Recv failure: Connection reset by peer
    计算机网络,路由与DNS演示
    python向mysql插入自增字段
    洛谷P1516 青蛙的约会
    电子海图开发第三十八篇 , s57,s52标准电子海图,条件符号程序(共一百篇)
    电子海图开发第三十七篇 , s57,s52标准电子海图,绘制面命令及其示例(共一百篇)
    电子海图开发第三十六篇 , s57,s52标准电子海图,绘制线命令及其示例(共一百篇)
    电子海图开发第三十五篇 , s57,s52标准电子海图,绘制点命令及其示例(共一百篇)
    电子海图开发第三十四篇 , s57,s52标准电子海图,文本的绘制示例(共一百篇)
    电子海图开发第三十三篇 , s57,s52标准电子海图,文本的绘制(共一百篇)
  • 原文地址:https://www.cnblogs.com/lear/p/5654058.html
Copyright © 2020-2023  润新知