首先我们需要继承一下UITableView并且遵守<UITableViewDelegate,UITableViewDataSource,UICollectionViewDataSource,UICollectionViewDelegate,UIScrollViewDelegate>的代理实现响应的代理方法,

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {}

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

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

-(MedCView *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{}

^    /*

|   下方这个代理方法,在一般开发中并不常见,但是这里不可获取

|    */

|   -(void)tableView:(UITableView *)tableView willDisplayCell:(MedCView *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{}

|

|  <- 箭头指向的自定义tableView相信你也一定注意到了,这里想要实现嵌套就需要自定义,自定义的tableview需要实现同时实现继承UItableview和UICollectionview

这就需要实现两个接口

//方便复制:.h的定义接口

#import <UIKit/UIKit.h>

@interface MedColView : UICollectionView

@property (nonatomic, strong) NSIndexPath *indexPath;

@end

static NSString *MedCViewCellIdentifier = @"MedCViewCellIdentifier";

@interface MedCView : UITableViewCell

@property (nonatomic, strong) MedColView *collectionView;

-(void)setCollectionViewDataSourceDelegate:(id<UICollectionViewDataSource, UICollectionViewDelegate>)dataSourceDelegate indexPath:(NSIndexPath *)indexPath ;

@end

//.m方法的实现

#import "MedCView.h"

#import "MedCollView.h"

#import "define.h"

@implementation MedColView

@end

@interface MedCView()

@property (nonatomic,strong)UICollectionViewFlowLayout *layout;

@end

static NSString *CollectionViewCell = @"CollectionViewCell";

float H;

@implementation MedCView

-(UICollectionViewFlowLayout *)layout{

if (_layout == nil) {

_layout = [[UICollectionViewFlowLayout alloc] init];

_layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);

_layout.itemSize = CGSizeMake(ZCScreenWidth /4,95/H);

_layout.minimumLineSpacing = 0.1;

_layout.scrollDirection = UICollectionViewScrollDirectionVertical;

}

return _layout;

}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

if (!(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) return nil;

H =[UIView hightsize];

self.collectionView = [[MedColView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) collectionViewLayout:self.layout];

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CollectionViewCell];

self.collectionView.backgroundColor = [UIColor whiteColor];

self.collectionView.showsHorizontalScrollIndicator = NO;

self.collectionView.showsVerticalScrollIndicator = NO;

[self addSubview:self.collectionView];

self.collectionView.scrollEnabled = YES;

self.collectionView.scrollsToTop = YES;

return self;

}

-(void)layoutSubviews

{

[super layoutSubviews];

self.collectionView.frame = CGRectMake(0, self.contentView.bounds.origin.y, self.contentView.bounds.size.width , self.contentView.bounds.size.height);

}

-(void)setCollectionViewDataSourceDelegate:(id<UICollectionViewDataSource, UICollectionViewDelegate>)dataSourceDelegate indexPath:(NSIndexPath *)indexPath

{

self.collectionView.dataSource = dataSourceDelegate;

self.collectionView.delegate = dataSourceDelegate;

self.collectionView.indexPath = indexPath;

[self.collectionView setContentOffset:self.collectionView.contentOffset animated:NO];

[self.collectionView reloadData];

[[NSNotificationCenter defaultCenter]postNotificationName:@"sethight" object:nil];

}

@end

//setCollectionViewDataSourceDelegate:方法是为了实现代理方法的传递与前方的-(void)tableView:(UITableView *)tableView willDisplayCell:(MedCView *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{}方法呼应

//由于这只是我的一个Controller里的一个模块,所以发了一个通知去更新UI,这里的难度就是同时继承两个控件实现各自的代理方法以及各类之间的关联度也很高

UItableView嵌套UICollectionView的更多相关文章

  1. Swift UITableView嵌套UICollectionView点击事件冲突(点击事件穿透)

    不管是啥都响应tableviewcell class JYShopCertificationCell: UITableViewCell { override func hitTest(_ point: ...

  2. iOS使用UIScrollView实现左右滑动UITableView和UICollectionView

    在UIScrollView嵌套UITableView这篇文章是非常,但该项目的需求,需要嵌套UICollectionView,和UICollectionView和UITableView有非常多的不同, ...

  3. RumTime实践之--UITableView和UICollectionView缺省页的实现

    有关RunTime的知识点已经看过很久了,但是一直苦于在项目中没有好的机会进行实际运用,俗话说"光说不练假把式",正好最近在项目中碰到一个UITableView和UICollect ...

  4. UITableView和UICollectionView的方法学习一

    参考资料 UITableView UICollectionView UICollectionViewDataSource UICollectionViewDelegate UICollectionVi ...

  5. UITableView和UICollectionView的Cell高度的几种设置方式

    UITableViewCell 1.UITableView的Cell高度默认由rowHeight属性指定一个低优先级的隐式约束 2.XIB中可向UITableViewCell的contentView添 ...

  6. iOS 8自动调整UITableView和UICollectionView布局

    本文转载自:http://tech.techweb.com.cn/thread-635784-1-1.html 本文讲述了UITableView.UICollectionView实现 self-siz ...

  7. iOS中UITableView和UICollectionView的默认空态页

    项目中想实现空态页风格统一控制的效果,就封装了一个默认空态页,使用的技术点有:1 方法替换 ,2 给分类(Category)添加属性. 我们知道,扩展(extension)可以给类添加私有变量和方法. ...

  8. UITableVIew与UICollectionView带动画删除cell时崩溃的处理

    UITableVIew与UICollectionView带动画删除cell时崩溃的处理 -会崩溃的原因是因为没有处理好数据源与cell之间的协调关系- 效果: tableView的源码: ModelC ...

  9. [转]iOS8 自动调整UITableView和UICollectionView布局

    转自:http://www.cocoachina.com/industry/20140825/9450.html (via:玉令天下的Blog)   本文讲述了UITableView.UICollec ...

随机推荐

  1. MyScript 手写识别数学公式、图形 自动计算

    项目的地址  http://git.oschina.net/bimingcong/MyScript #说明:MyScript是一种能够自动识别用户在屏幕上的手势,然后转化为相应的数学公式.图形(比如三 ...

  2. 使用jquery form插件进行异步带文件的表单提交

    引入form插件与jquery 的js文件后 获取表单的jq对象 然后.ajaxSubmit提交表单即可 实现添加品牌的异步表单提交 function addBarandImg(formId) { $ ...

  3. js 去掉字符串前后空格

    //去左空格; function ltrim(s){ return s.replace(/(^\s*)/g, ""); } //去右空格; function rtrim(s){ r ...

  4. unity3d使用脚本保存屏幕截图

    using UnityEngine; using System.Collections; using System.IO; public class FrameAnimation : MonoBeha ...

  5. linux系统的目录结构

    前言 对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要 ...

  6. 【网站运营】网站被K的原因大总结

    对于广大的站长来说网站被K或者是被降权是经常有的事情,不过我基本上还没有看见过Google的K站情况,也就是给网站降个权什么的处罚.如果你是用了很严重的作弊手段的话,那指定会是被Google给K掉的. ...

  7. 【转】HTTP状态码(HTTP Status Code)

    原文链接:http://www.chaoji.com/features/httpstatus.aspx 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - ...

  8. PHP裁剪图片并上传完整demo

    日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包

  9. netbeans中实体类代码的bug

    用了netbeans中实体类代码后,忽然报错: com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到sun.util.logging.Platf ...

  10. Windows2008当桌面使用

    因为需要32位系统,又想用8G内存. 一.提高开机速度   0 |" t7 A- d! `- A- R5 | 1.免除登录时按Ctrl+Alt+Del的限制 打开<开始> - & ...