iPad popView封装

仿照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) IBOutlet
UITableView *leftTV;

@property (weak,
nonatomic) IBOutlet
UITableView *rightTV;

@property (nonatomic,assign)
NSInteger selectRow;

@end

@implementation popView

+ (popView *)makePopView

{

return [[[NSBundle
mainBundle]loadNibNamed:@"popView"
owner:self
options:nil]firstObject];

}

#pragma mark - tableview delegate

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

{

if (tableView == _leftTV) {

return [self.dataSource
numberOfRowsInLeftTable:self];

}else{

return [self.dataSource
popView:self
subDataForRow:_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 = [[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:str];

}

cell.textLabel.text = [self.dataSource
popView:self
titleForRow:indexPath.row];

cell.imageView.image = [UIImage
imageNamed:[self.dataSource
popView:self
imageForRow:indexPath.row]];

NSArray *subDataArray = [self.dataSource
popView:self
subDataForRow: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 = [[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:str];

}

cell.textLabel.text = [self.dataSource
popView:self
subDataForRow:_selectRow][indexPath.row];

return cell;

}

}

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

{

if (tableView == _leftTV) {

self.selectRow = indexPath.row;

[_rightTV
reloadData];

}

}

@end

在控制器使用

#import "PopViewController.h"

#import "popView.h"

#import "CategoriyModel.h"

@interface
PopViewController ()<MyPopviewDataSource>

@end

@implementation PopViewController

- (void)viewDidLoad

{

[super
viewDidLoad];

popView *pop = [popView
makePopView];

[self.view
addSubview:pop];

pop.dataSource =
self;

pop.autoresizingMask =
UIViewAutoresizingNone;

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

}

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

- (NSArray *)getData

{

CategoriyModel *md = [[CategoriyModel
alloc]init];

NSArray *categorieyArray = [md
loadPlistData];

return categorieyArray;

}

#pragma mark - popview dataSource

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

return [self
getData].count;

}

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

return [[self
getData][row]name];

}

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

return [[self
getData][row]small_icon];

}

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

return [[self
getData][row]subcategories];

}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 15:18:32

iPad popView封装的相关文章

iPad编程

1. iPad 现有型号: iPad Pro, iPad Air, iPad mini 均配备Retina显示屏.早期还有iPad 依次对应的坐标系及分辨率: iPad Pro 坐标系:1366 x 1024  分辨率:2732 x 2048 iPad Air  坐标系:1024 x 768    分辨率:2048 x 1536 iPad mini  坐标系:1024 x 768    分辨率:2048 x 1536 开发过程中图片可只设计2048 x 1536 分辨率下的.根据实际情况,也可选

封装自己的framework静态库

ios中我们写的代码有时不愿意让别人看到,可能对它进行封装,生成一个静态库如典型的.a,还有一种就是和 苹果自带的库一样的后缀名为.framework的库,个人推荐使用.framework,因为.a不仅要装其添加进去,还要 将对应的头文件添加到项目中. 1.新建一个静态库工程.file--new--project,弹出框中选择Ios--framework&library中的cocoa touch static library.点击NEXT.输入product name,这里为libZW. 2.删

iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引

http://www.code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 http://www.cocoacontrols.com/ 英文版本的lib收集 http://www.objclibs.com/ 精品lib的收集网站 http://www.ityran.com/forum-61-1.html 泰然代码仓库 ---------------------- emoji ---------------------- http://www.easyapns.c

封装的一套简单轻量级JS 类库(RapidDevelopmentFramework.JS)

1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速开发的JS 框架.因为早前也一直想开发一套快速的JS 框架,但是种种原因一直没用突破点也就不了了之了,开发这套JS 的框架主要是为了方便自己使用以,及其他开发人员的使用.通用的功能包主要括JS 的校验 上传图片 视频 语音  以分页 时间插件的选择 和ajax 请求以及其他的第三方的插件的混合使用等

oc学习之封装与类之间的关系

1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中. 好处: 屏蔽了内部的实现. 便于管理. 类是一种更高级别的封装: 1个类中封装数据的状态和行为. 将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心. 只需要知道这个类是干啥的? 怎么用? 把哪些复杂的东西. 方法,属性.封装成1个类的整体. 2.

黑马程序员-----封装的概念及原理

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲   封装的概念及原理 本小节知识点: 1.[了解]为什么要进行封装 2.[了解]封装的原理 1.为什么要进行封装 不封装的缺点: 当一个类把自己的属性暴露给外部的时候,那么该类就是去对属性的管理权. 将数据隐藏起来,只能用此类的方法函

解决ipad连不上pptp的问题

搭建了一个PPTP,发现windows连接和打开网页都没问题,但ipad能连上,但打不开网页,后来发现是MTU的问题 MTU,英文全称为Maximum Transmission Unit,中文即最大传输单元的意思,是一种通信协议层上所能通过的最大数据包值.如果MTU设置得当,可以优化网络性能.反之设置不当,则可能影响网络速度.甚至影响部分软件和网络使用.比如连接上VPN不能访问网站,或不能连接等问题. 由于VPN连接需要对原有的IP或者是TCP/UDP数据进行封装,因此增加了数据的长度.如果VP

封装cookie.js、EventUtil.js、

最近学习了javascript,封装好的东西看起来舒服,以备需要的时候拉出来,jquery对javascript做了很好的封装!以后会多用jquery多些 var CookieUtil = { get: function (name){ var cookieName = encodeURIComponent(name) + "=", cookieStart = document.cookie.indexOf(cookieName), cookieValue = null, cookie

MP4box 封装媒体裸码流

MP4BOX是MP4文件封装工具,仅支持命令行方式调用.以下是其支持的字幕封装参数的调用实例: mp4box -add 1.srt:lang=zh:name=Caption:hdlr=sbtl:font="微软雅黑":size=22 -new 1.srt.mp4 如果需要支持iPhone/iTouch/iPod/iPad等设备,可以添加参数“-ipod”: mp4box -ipod -add 1.srt:lang=zh:name=Caption:hdlr=sbtl:font="