仿照UITableView的UITableViewDataSource
协义

1.代理。让代理帮我们类完毕一些方法

2.完毕当前类不能完毕的事情还有传值等功能

实现方法

// 1. 声明一个协议

// 2. 声明协议中的方法

// 3. 声明一个遵守协议的id类型的指针

// 4. 实现协议方法

@class popView;

@protocol MyPopviewDataSource <NSObject>

//制定协议方法

//left tablevie 行数

- (NSInteger)numberOfRowsInLeftTable:(popView *)popView;

//left 标题

- (NSString *)popView:(popView *)popView titleForRow:(NSInteger)row;

//left 图标

- (NSString *)popView:(popView *)popView imageForRow:(NSInteger)row;

//left 子数据

- (NSArray *)popView:(popView *)popView subDataForRow:(NSInteger)row;

@end

@interface popView :UIView

@property (nonatomic,assign)id<MyPopviewDataSource> dataSource;

+ (popView*)makePopView;

@end

#import "popView.h"

@interface popView ()<UITableViewDataSource,UITableViewDelegate>

@property (weak,
nonatomic) IBOutletUITableView *leftTV;

@property (weak,
nonatomic) IBOutletUITableView *rightTV;

@property (nonatomic,assign)NSInteger selectRow;

@end

@implementation popView

+ (popView *)makePopView

{

return [[[NSBundlemainBundle]loadNibNamed:@"popView"owner:selfoptions:nil]firstObject];

}

#pragma mark - tableview delegate

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

{

if (tableView == _leftTV) {

return [self.dataSourcenumberOfRowsInLeftTable:self];

}else{

return [self.dataSourcepopView:selfsubDataForRow:_selectRow].count;

}

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

if (tableView == _leftTV) {

static NSString *str =@"Mycell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];

if (cell ==
nil) {

cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:str];

}

cell.textLabel.text = [self.dataSourcepopView:selftitleForRow:indexPath.row];

cell.imageView.image = [UIImageimageNamed:[self.dataSourcepopView:selfimageForRow:indexPath.row]];

NSArray *subDataArray = [self.dataSourcepopView:selfsubDataForRow:indexPath.row];

if (subDataArray.count) {

cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;

}else{

cell.accessoryType =UITableViewCellAccessoryNone;

}

return cell;

}else{

static NSString *str =@"Mycell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];

if (cell ==
nil) {

cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:str];

}

cell.textLabel.text = [self.dataSourcepopView:selfsubDataForRow:_selectRow][indexPath.row];

return cell;

}

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

if (tableView == _leftTV) {

self.selectRow = indexPath.row;

[_rightTVreloadData];

}

}

@end

在控制器使用

#import "PopViewController.h"

#import "popView.h"

#import "CategoriyModel.h"

@interface PopViewController ()<MyPopviewDataSource>

@end

@implementation PopViewController

- (void)viewDidLoad

{

[superviewDidLoad];

popView *pop = [popViewmakePopView];

[self.viewaddSubview:pop];

pop.dataSource =self;

pop.autoresizingMask =UIViewAutoresizingNone;

self.preferredContentSize =CGSizeMake(pop.frame.size.width, pop.frame.size.height);

}

//获取到
第一个分类数据下拉菜单的模型数组

- (NSArray *)getData

{

CategoriyModel *md = [[CategoriyModelalloc]init];

NSArray *categorieyArray = [md loadPlistData];

return categorieyArray;

}

#pragma mark - popview dataSource

- (NSInteger)numberOfRowsInLeftTable:(popView *)popView{

return [selfgetData].count;

}

- (NSString *)popView:(popView *)popView titleForRow:(NSInteger)row{

return [[selfgetData][row]name];

}

- (NSString *)popView:(popView *)popView imageForRow:(NSInteger)row{

return [[selfgetData][row]small_icon];

}

- (NSArray *)popView:(popView *)popView subDataForRow:(NSInteger)row{

return [[selfgetData][row]subcategories];

}

@end

iPad popView封装的更多相关文章

  1. iPad编程

    1. iPad 现有型号: iPad Pro, iPad Air, iPad mini 均配备Retina显示屏.早期还有iPad 依次对应的坐标系及分辨率: iPad Pro 坐标系:1366 x ...

  2. 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装

    1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...

  3. iPad和iPhone开发区别

    原文:http://mobile.51cto.com/iphone-273895.htm iPad与iPhone 开发区别详解是本文要介绍的内容,先来看看他们的区别. 1.首先我们先从官方发布的SDK ...

  4. 封装同步的UIActionSheet

    封装同步的UIActionSheet 发问题 做 iOS 开发的同学想必都用过 UIActionSheet.UIActionSheet 可以弹出一个选择列表,让用户选择列表中的某一项操作.使用 UIA ...

  5. 封装cookie.js、EventUtil.js、

    最近学习了javascript,封装好的东西看起来舒服,以备需要的时候拉出来,jquery对javascript做了很好的封装!以后会多用jquery多些 var CookieUtil = { get ...

  6. 初识iOS9 iPad新特性SlideView和SplitView的适配

    苹果刚发布了iOS9,在iPad上新增了两个新的特性SlideView和SplitView,前者可以在不关闭当前激活APP的情况下调出来另外个APP以30%比例显示进行操作使用,后者允许同时运行两个A ...

  7. iPad开发(相对于iPhone开发时专有的API)

    iPad开发 一.iPad开发简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定价介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2. ...

  8. oc之封装与类之间的关系

    1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码 ...

  9. 架构漫谈系列(2) 封装(Encapsulation)

    这是这个系列的第二篇.在第二篇里,我决定讲一讲封装. 程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联. 可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来. 我们先 ...

随机推荐

  1. luogu P1592 互质(欧拉函数)

    题意 (n<=106,k<=108) 题解 一开始以为是搜索. 但想想不对,翻了一眼题解发现是欧拉函数. 因为 gcd(a,b)=gcd(a,a+b) 所以和n互质的数应该是类似a1,a2 ...

  2. 重载和const形参

    1.int lookup(string p); 2.int lookup(const string p);//同1 3.int lookup(string *);//传入一个指针,指针指向string ...

  3. LaTeX 简介与安装

    1 LaTeX 简介 Leslie Lamport 开发的 LaTeX 是当今世界上最流行和使用最为广泛的TeX格式.它构筑在Plain TeX的基础之上,并加进了很多的功能以使得使用者可以更为方便的 ...

  4. hpuoj--校赛--与学妹滑雪(最短路+精度判断)

    问题 G: 感恩节KK专场--与学妹滑雪 时间限制: 1 Sec  内存限制: 128 MB 提交: 284  解决: 25 [提交][状态][讨论版] 题目描述 这周下的雪好大好大,不过这正和KK学 ...

  5. BMP图片格式模型

    BMP BMP(全称Bitmap)是Window操作系统中的标准图像文件格式 可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广. 它采用位映射存储格式,除了图像深度可选以外,不 ...

  6. Apache Bench测试

    - 压力测试神器 Siege - Locust Web测压工具python开源 - 介绍: ab是apachebench命令的缩写. ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某 ...

  7. Storm框架基础(一)

    * Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较:  在SparkStreaming中: 我们曾尝 ...

  8. display的几种常用取值

    display的取值有很多种,下面列出比较常用的几种取值,还有其它的少用的值没有列出来: 1.none 此元素不会被显示,并且不占据页面空间,这也是与visibility:hidden不同的地方,设置 ...

  9. <<大学>>原文

    大学之道,在明明德,在亲民,在止于至善.知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得.物有本末,事有终始,知所先后,则近道矣. 古之欲明明德于天下者,先治其国,欲治其国者,先齐其家:欲 ...

  10. Busy waiting

    In computer systems organization or operating systems, "busy waiting" refers to a process ...