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) 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封装的更多相关文章
- iPad编程
1. iPad 现有型号: iPad Pro, iPad Air, iPad mini 均配备Retina显示屏.早期还有iPad 依次对应的坐标系及分辨率: iPad Pro 坐标系:1366 x ...
- 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装
1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...
- iPad和iPhone开发区别
原文:http://mobile.51cto.com/iphone-273895.htm iPad与iPhone 开发区别详解是本文要介绍的内容,先来看看他们的区别. 1.首先我们先从官方发布的SDK ...
- 封装同步的UIActionSheet
封装同步的UIActionSheet 发问题 做 iOS 开发的同学想必都用过 UIActionSheet.UIActionSheet 可以弹出一个选择列表,让用户选择列表中的某一项操作.使用 UIA ...
- 封装cookie.js、EventUtil.js、
最近学习了javascript,封装好的东西看起来舒服,以备需要的时候拉出来,jquery对javascript做了很好的封装!以后会多用jquery多些 var CookieUtil = { get ...
- 初识iOS9 iPad新特性SlideView和SplitView的适配
苹果刚发布了iOS9,在iPad上新增了两个新的特性SlideView和SplitView,前者可以在不关闭当前激活APP的情况下调出来另外个APP以30%比例显示进行操作使用,后者允许同时运行两个A ...
- iPad开发(相对于iPhone开发时专有的API)
iPad开发 一.iPad开发简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定价介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2. ...
- oc之封装与类之间的关系
1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码 ...
- 架构漫谈系列(2) 封装(Encapsulation)
这是这个系列的第二篇.在第二篇里,我决定讲一讲封装. 程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联. 可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来. 我们先 ...
随机推荐
- [六省联考2017]分手是祝愿(期望+DP)
题解 很容易想出来最优策略是什么. 就是从n到1看到开着的灯就把它关了 我们预处理出当前状态把灯全部关闭后的最少步数cnt 然后我们的主人公就要瞎按... 设dp[i]代表当前状态最优解为i步时走到d ...
- linux磁盘管理与分区 转载
原文:http://zhengjianglong.leanote.com/post/linux%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA 一.基础知识 一块磁盘可以分为多 ...
- ActiveMQ客户端配置使用
一.通过JNDI来使用ActiveMQ 1.jndi配置JMS对象 java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQIni ...
- 题解 洛谷 P4047 【[JSOI2010]部落划分】
我觉得几乎就是一道最小生成树模板啊... 题解里许多大佬都说选第n-k+1条边,可我觉得要这么讲比较容易理解 (虚边为能选的边,实边为最小生成树) 令n=5,k=2,(1,3)<(1,2)< ...
- python set元素访问
python中集合set主要利用其唯一性,及并集|.交集&等操作,但不可以直接通过下标进行访问,必须访问时可以将其转换成list再访问 x={1,2,5} y=list(x) a=y[1] a ...
- 在oracle中采用connect by prior来实现递归查询
注明:该文章为引用别人的文章,链接为:http://blog.csdn.net/apicescn/article/details/1510922 , 记录下来只是为了方便查看 原文: connect ...
- Qt之QPushButton
简述 前面章节我们分享过Qt之QAbstractButton,讲解了QAbstractButton的基本用法,本节着重讲解QPushButton. 简述 常用状态 效果 源码 QSS 更多参考 关于Q ...
- 使用IIS承载WCF服务
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 1.WCF能够方便的通过IIS承载,此承载模型与ASP.NET和ASP.NET Web Servi ...
- Seq和Ack
http://blog.csdn.net/bytebai/article/details/21752925 握手阶段: 序号 方向 seq ack1 A-& ...
- Struts2中Struts.xml的作用
struts.xml 为Struts 2的核心配置文件.struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等.struts.xml中主要配置Stru ...