IOS 模仿TableView封装
一.先贴一下未封装的代号,好跟后面的对比
@interface MTHomeDropdown : UIView
+ (instancetype)dropdown;
@property (nonatomic, strong) NSArray *categories;
@end
1.categories只是其中一个类型的数据传入,无法多处使用
2.将他封装之后,可以供多个数据传入,多处使用
二.封装
@class MTHomeDropdown;
@protocol MTHomeDropdownDataSource <NSObject>
/**
* 左边表格一共有多少行
*/
- (NSInteger)numberOfRowsInMainTable:(MTHomeDropdown *)homeDropdown;
/**
* 左边表格每一行的标题
* @param row 行号
*/
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown titleForRowInMainTable:(int)row;
/**
* 左边表格每一行的子数据
* @param row 行号
*/
- (NSArray *)homeDropdown:(MTHomeDropdown *)homeDropdown subdataForRowInMainTable:(int)row;
@optional
/**
* 左边表格每一行的图标
* @param row 行号
*/
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown iconForRowInMainTable:(int)row;
/**
* 左边表格每一行的选中图标
* @param row 行号
*/
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown selectedIconForRowInMainTable:(int)row;
@end
@interface MTHomeDropdown : UIView
+ (instancetype)dropdown;
@property (nonatomic, weak) id<MTHomeDropdownDataSource> dataSource;
@end
1.声明协议:<MTHomeDropdownDataSource>,并声明协议的方法
2.声明遵守协议的数据源 dataSource.
3. .m
/** 左边主表选中的行号 */
@property (nonatomic, assign) NSInteger selectedMainRow;
4.调用dataSource 方法来获得数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.mainTableView) {
return [self.dataSource numberOfRowsInMainTable:self];
} else {
return [self.dataSource homeDropdown:self subdataForRowInMainTable:self.selectedMainRow];
}
}
5.创建MTMetaTool元数据工具类:管理所有的元数据(固定的描述数据)
.h
/**
* 返回344个城市
*/
+ (NSArray *)cities;
/**
* 返回所有的分类数据
*/
+ (NSArray *)categories;
/**
* 返回所有的排序数据
*/
+ (NSArray *)sorts;
.m
static NSArray *_cities;
+ (NSArray *)cities
{
if (_cities == nil) {
_cities = [MTCity objectArrayWithFilename:@"cities.plist"];;
}
return _cities;
}
static NSArray *_categories;
+ (NSArray *)categories
{
if (_categories == nil) {
_categories = [MTCategory objectArrayWithFilename:@"categories.plist"];;
}
return _categories;
}
static NSArray *_sorts;
+ (NSArray *)sorts
{
if (_sorts == nil) {
_sorts = [MTSort objectArrayWithFilename:@"sorts.plist"];;
}
return _sorts;
}
6.一个ZXCategoryViewController类想用homeDropdown来展示数据,就要遵循协议并实现方法
@interface ZXCategoryViewController ()<MTHomeDropdownDataSource>
dropdown.dataSource = self;
#pragma mark - MTHomeDropdownDataSource
- (NSInteger)numberOfRowsInMainTable:(MTHomeDropdown *)homeDropdown
{
return [MTMetaTool categories].count;
}
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown titleForRowInMainTable:(int)row
{
MTCategory *category = [MTMetaTool categories][row];
return category.name;
}
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown iconForRowInMainTable:(int)row
{
MTCategory *category = [MTMetaTool categories][row];
return category.small_icon;
}
- (NSString *)homeDropdown:(MTHomeDropdown *)homeDropdown selectedIconForRowInMainTable:(int)row
{
MTCategory *category = [MTMetaTool categories][row];
return category.small_highlighted_icon;
}
- (NSArray *)homeDropdown:(MTHomeDropdown *)homeDropdown subdataForRowInMainTable:(int)row
{
MTCategory *category = [MTMetaTool categories][row];
return category.subcategories;
}
IOS 模仿TableView封装的更多相关文章
- iOS 瀑布流封装
代码地址如下:http://www.demodashi.com/demo/12284.html 一.效果预览 功能描述:WSLWaterFlowLayout 是在继承于UICollectionView ...
- Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法
前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...
- iOS开发tableView去掉顶部上部空表区域
tableview中的第一个cell 里上部 有空白区域,大概64像素 在viewDidLoad中加入如下代码 self.automaticallyAdjustsScrollViewInsets = ...
- iOS蓝牙原生封装,助力智能硬件开发
代码地址如下:http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手环 ...
- android 仿ios 对话框已封装成工具类
对话框 在android中是一种非经常见的交互提示用户的方式,可是非常多产品狗都叫我们这些做android的仿ios,搞的我们android程序猿非常苦逼,凭什么效果老是仿ios,有没有一点情怀,只是 ...
- 模仿JQuery封装ajax功能
需求分析 因为有时候想提高性能,只需要一个ajax函数,不想引入较大的jq文件,尝试过axios,可是get方法不支持多层嵌套的json,post方式后台接收方式似乎要变..也许是我不太会用吧..其实 ...
- ios中tableview网封装(viewcontroller封装)常用的
下载地址 http://pan.baidu.com/share/link?shareid=3657500168&uk=923776187 使用框架 1:asIHttpRequest库 2;SB ...
- ul、li模仿ios的TableView实现城市选择
最近项目一个接着一个,之前说的精创环的项目还没做完,今天说先把那个放一下,先做访客系统,销售会见客户之后可以对客户进行一个跟踪记录,原型图也给了,今日头条的频道自定义页面一样. 如果是在IOS上让我来 ...
- 初学IOS之TableView
PS:tableview作为IOS的UI界面的重点,今天我只学习一部分,在下文列出. 下文我以创建省份为例子,用纯代码的方式创建,但是并不是最优代码,仅作熟悉tableview的创建使用. ----- ...
随机推荐
- 搭建Spring + SpringMVC + Mybatis框架之三(整合Spring、Mybatis和Spring MVC)
整合Spring和SpringMVC 之前已经整合了spring和mybatis,现在在此基础上整合SSM. 项目目录: 思路:SpringMVC的配置文件独立,然后在web.xml中配置整合. (1 ...
- 专注网格剖分 - TetGen
提要 记得大三那一年有一门课叫做高等有限元,最后的作业就是网格剖分算法的实现,我和同学一起花了些时间做了一个Qt程序,他写算法,我写界面,最后成绩竟然出奇的拿了90多... 今天要介绍的这款软件Tet ...
- SVN “工作副本 “...” 已经锁定”的解决的方法
svn更新到一半出错,再更新提示已经锁定,清理一下就好了
- Xcode常见的编译、运行等错误的解决
Xcode常见的编译.运行等错误的解决 项目没找到Info.plist的错误 The solution for this particular instance of the error was “I ...
- 云服务器 ECS Linux 系统添加“回收站”
删除是危险系数很高的操作,一旦误删可能会造成难以估计的损失.在云服务器 ECS Linux 系统中这种危险尤为明显.比如,一条简单的语句:rm –rf /* 就会把整个系统全部删除,而 Linux 并 ...
- c#如何在win7下设置IE代理的完美解决方案
有人还发现:在window7下, 在一个进程中, 设置和取消不能都执行,---- 要么设置,要么取消. 但如果第一次运行时,只进行设置代理,退出后再进运行,只进行取消,这是没有问题的. 简单说说中医 ...
- QT 操作数据库
整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...
- Objective-C学习笔记
. 链接:Objective-C学习笔记 (pdf版) .
- scala的下划线
1.作为“通配符”,类似Java中的*.如import scala.math._ 2.:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就 ...
- js实现网站导航的二级下拉菜单
http://www.codesky.net/article/201109/1200js/%E5%AE%9E%E7%94%A8%E5%AF%BC%E8%88%AA%E8%8F%9C%E5%8D%95. ...