文档章节

iOS CollectionView实现屏幕左右滑动

AustinKuture
 AustinKuture
发布于 2016/07/27 11:29
字数 439
阅读 1110
收藏 1
点赞 0
评论 0

由于代码量较大,本文主要简单讲解主要步骤,如有疑问可以留言或私信.

一,创建自定义UICollectionViewCell,并实现TableView的数据源,代理方法.

#import <UIKit/UIKit.h>

@interface AKCollectionCellFirst : UICollectionViewCell<UITableViewDelegate,UITableViewDataSource>

@property (nonatomic,strong) UITableView *tabView;

@end


#import "AKCollectionCellFirst.h"


@interface AKCollectionCellFirst() 


@end
@implementation AKCollectionCellFirst

- (id)initWithFrame:(CGRect)frame{
    
    self = [super initWithFrame:frame];
    if (self){
        
        _tabView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
        _tabView.separatorStyle = UITableViewCellSeparatorStyleNone;
        _tabView.delegate = self;
        _tabView.dataSource = self;
        //如果需要自定义tableViewCell可以在此对其进行注册
        [_tabView registerClass:[AKTableCellFirst class] forCellReuseIdentifier:@"ONE"];
       
        
        [self addSubview:_tabView];
    }
    
    return self;
}

二, 在CollectionViewCell中实现TableView的数据源和代理方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    
    return 10;
    
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    return 120;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    AKTableCellFirst *cell = [tableView dequeueReusableCellWithIdentifier:@"ONE"];
    
    if (cell == nil){
        
        cell = [[AKTableCellFirst alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ONE"];
    }
    
    NSArray *arrayP = @[@"Kuture",@"CD",@"ER",@"TE",@"WEB",@"AUI",@"HG",@"TYT",@"FHB",@"AW"];
    
    cell.person.text = arrayP[indexPath.row];
    cell.time.text = @"2016-07-11 15:08";
    cell.flowChat.text = @"What?";
    cell.content.text = @"You Know Who I am And you Find SomeThing,What?You find again ? I do not Belive that";
    cell.content.numberOfLines = 0;
    
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

 

三, 创建UIViewController控制器并继承Collection协议与代理方法,创建UICollectionView,并注册自定义CollectionViewCell

#import "AKCollection.h"

@interface AKCollection()<UICollectionViewDelegate,
                         UICollectionViewDelegateFlowLayout,
                         UICollectionViewDataSource>
@end

@implementation AKCollection

- (void)viewDidLoad{
   
  [super viewDidLoad];
  
  UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    flowLayout.itemSize = CGSizeMake(SCREEN_W, SCREEN_H - 150);
    flowLayout.minimumLineSpacing = 0;

    
    UICollectionView *collec = [[UICollectionView alloc]initWithFrame:self.view.frame collectionViewLayout:flowLayout];
    _collec = collec;
    _collec.delegate = self;
    _collec.dataSource = self;
    _collec.bounces = NO;
    _collec.backgroundColor = GROUND_COLOR(242, 242, 242, 1);
    _collec.alpha = 0.95;
    _collec.pagingEnabled = YES;
    
    //注册自定义的UICollectionViewCell
    [_collec registerClass:[AKCollectionCellFirst class] forCellWithReuseIdentifier:@"CellFirst"];
    [_collec registerClass:[AKCollectCellSecond class] forCellWithReuseIdentifier:@"CellSecond"];
    [_collec registerClass:[AKCollectCellThird class] forCellWithReuseIdentifier:@"CellThird"];
    [_collec registerClass:[AKCollectCellFourth class] forCellWithReuseIdentifier:@"CellFourth"];
    
    [self.view addSubview:_collec];

}

四, 实现数据源,代理方法:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    
    return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    
    return 4;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    
    UICollectionViewCell *cell;
    
    NSArray *idArray = @[@"CellFirst",@"CellSecond",@"CellThird",@"CellFourth"];
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:idArray[indexPath.item] forIndexPath:indexPath];

    return cell;

}

 

© 著作权归作者所有

共有 人打赏支持
AustinKuture
粉丝 12
博文 40
码字总数 23740
作品 0
海淀
iOS工程师
iOS | 伤人于无形:CGFloat

背景 公司群有同事反映APP在plus机型上存在展示错误,如下: 实际上我们期望的效果是: 让人不解的是:只有在plus机型上才出现这种展示错误,其余机型都是OK的。 开发阶段我用了各种机型来调...

无夜之星辰 ⋅ 06/16 ⋅ 0

如何获取UICollectionView的某个Cell

可能你会遇这种情况:collectionView每个cell是屏幕大小,然后上面添加了tableview,tableview可以上拉加载更多,当上拉加载完数据后,我们可以2种方式更新UI,如下 但有时候在加载过程中,你会...

爱跑步爱旅游 ⋅ 05/15 ⋅ 0

史上第二走心的 iOS11 Drag & Drop 教程

2017.11.02 话不多说,先上效果图 世界上最大的男性交友网站有demo 一.Tips:你必须要知道的概念 1. Drag 和 Drop 是什么呢? 一种以图形展现的方式把数据从一个 app 移动或拷贝到另一个 ap...

si1ence ⋅ 2017/12/14 ⋅ 0

苹果对体无完肤的 iOS 11 最后的弥补

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 距离万众瞩目的苹果开发者大会(WWDC 2018)的召开还有不到一周时间,苹果公司于今天凌晨,正式发布了 iOS 11 的第十四次更...

csdnnews ⋅ 05/30 ⋅ 0

IOS12开发者预览版第二版使用评测

     手头有一部iPhone 6s Plus,因为之前看同学和朋友们升到IOS 11后手机变得非常卡顿所以没有升级。最近偶然看到IOS 12针对旧机型做了性能优化,号称提升70%相机打开速度、50%键盘显示...

张旭乾 ⋅ 前天 ⋅ 0

iOS查看屏幕帧数工具--YYFPSLabel

学习 YYKit 代码时,发现 ibireme 在项目里加入的一个查看当前屏幕帧数的小工具,效果如下: 挺实用,实现方法也很简单,但是思路特别棒。 这里是Demo: YYFPSLabel 这里我把这个小工具从 中...

yehot ⋅ 2016/04/05 ⋅ 0

全屏手势返回插件 - BBGestureBack

BBGestureBack Full screen return gesture(全屏手势返回 滑动返回 pop 动画效果) iOS 侧滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 现在市场上的主流app都有用到各种侧...

Bonway ⋅ 05/30 ⋅ 0

开发微信H5视频秀项目遇到的坑

介绍 手头上正好有个项目,需要做一个微信端H5视频秀的一个项目,想想好像挺简单的,由两个视频组成,播放完第一个视频后点击按钮继而播放第二个视频。好了,结果微信的坑TM的多 问题排查 自...

🚲Allen ⋅ 05/18 ⋅ 0

常见的移动端H5页面开发遇到的坑和解决办法

手机共通问题 问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果...

webmirror ⋅ 05/02 ⋅ 0

面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课 ⋅ 04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部