iOS中 自定义cell升级版 (高级)
接上次分享的自定义cell进行了优化:http://blog.csdn.net/qq_31810357/article/details/49611255
指定根视图:
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];
RootTableViewController.m
#import "WGModel.h" #import "WGCell.h" @interface RootTableViewController () @property (nonatomic, strong) NSMutableDictionary *dataDict; @end @implementation RootTableViewController - (void)viewDidLoad { [super viewDidLoad]; self.dataDict = [NSMutableDictionary dictionary]; [self.tableView registerClass:[WGCell class] forCellReuseIdentifier:@"cell"]; [self loadDataAndShow]; }
请求数据:
- (void)loadDataAndShow { NSURL *url = [NSURL URLWithString:@"http://api.breadtrip.com/trips/2387133727/schedule/"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (data != nil) { NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; for (NSDictionary *dict in array) { NSString *key = dict[@"date"]; NSArray *placesArray = dict[@"places"]; NSMutableArray *mutableArray = [NSMutableArray array]; for (NSDictionary *placesDict in placesArray) { WGModel *model = [[WGModel alloc] init]; [model setValuesForKeysWithDictionary:placesDict]; model.isShow = NO; [mutableArray addObject:model]; } [self.dataDict setObject:mutableArray forKey:key]; } [self.tableView reloadData]; } }]; }
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.dataDict.allKeys.count; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSString *key = self.dataDict.allKeys[section]; return [self.dataDict[key] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { WGCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; NSString *key = self.dataDict.allKeys[indexPath.section]; NSMutableArray *mutableArray = self.dataDict[key]; WGModel *model = mutableArray[indexPath.row]; [cell configureCellWithModel:model]; if (model.isShow == YES) { [cell showTableView]; } else { [cell hiddenTableView]; } return cell; }
自适应高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *key = self.dataDict.allKeys[indexPath.section]; NSMutableArray *mutableArray = self.dataDict[key]; WGModel *model = mutableArray[indexPath.row]; if (model.isShow) { return (model.pois.count + 1) * 44; } else { return 44; } }
点击cell会走的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *key = self.dataDict.allKeys[indexPath.section]; NSMutableArray *mutableArray = self.dataDict[key]; WGModel *model = mutableArray[indexPath.row]; model.isShow = !model.isShow; [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; }
自定义cell
//.h #import <UIKit/UIKit.h> @class WGModel; @interface WGCell : UITableViewCell<UITableViewDataSource, UITableViewDelegate> @property (nonatomic, strong) UILabel *aLabel; @property (nonatomic, strong) UITableView *tableView; - (void)configureCellWithModel:(WGModel *)model; - (void)showTableView; - (void)hiddenTableView; @end //.m #import "WGCell.h" #import "WGModel.h" @interface WGCell () @property (nonatomic, strong) NSMutableArray *dataArray; @end @implementation WGCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.dataArray = [NSMutableArray array]; [self addAllViews]; } return self; } - (void)addAllViews { self.aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)]; self.aLabel.backgroundColor = [UIColor greenColor]; [self.contentView addSubview:self.aLabel]; self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, [UIScreen mainScreen].bounds.size.width, 0) style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"testCell"]; // [self.contentView addSubview:self.tableView]; } - (void)showTableView { [self.contentView addSubview:self.tableView]; } - (void)hiddenTableView { [self.tableView removeFromSuperview]; } - (void)configureCellWithModel:(WGModel *)model { [self.dataArray removeAllObjects]; self.aLabel.text = model.place[@"name"]; NSArray *array = model.pois; for (NSDictionary *dict in array) { NSString *str = dict[@"name"]; [self.dataArray addObject:str]; } CGRect frame = self.tableView.frame; frame.size.height = 44 * array.count; self.tableView.frame = frame; [self.tableView reloadData]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"testCell" forIndexPath:indexPath]; NSString *str = self.dataArray[indexPath.row]; cell.textLabel.text = str; return cell; }
准备一个model类
//.h #import <Foundation/Foundation.h> @interface WGModel : NSObject @property (nonatomic, assign) BOOL isShow; @property (nonatomic, strong) NSDictionary *place; @property (nonatomic, strong) NSArray *pois; @end //.m #import "WGModel.h" @implementation WGModel - (void)setValue:(id)value forUndefinedKey:(NSString *)key { } @end
最终效果:
每日更新关注:http://weibo.com/hanjunqiang
新浪微博
iOS中 自定义cell升级版 (高级)的更多相关文章
- ios中自定义cell 设置cell的分组结构
ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式 以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- iOS 中自定义 cell,点击cell的时候文字不出现的原因
解决方案: 在setSelected方法中设置要显示label的背景颜色即可
- ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用
做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...
- ios之UI中自定义cell
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- iOS中 UITableViewCell cell划线那些事 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 在开发中经常遇到cell分割线显示不全或者想自定义线的宽高等; 最近总结了一下,希望帮到大家: 1.不想划线怎么办? Table ...
- ios中自定义checkbox
//自定义button#import <UIKit/UIKit.h> @interface CKButton : UIButton @end #import "CKButton. ...
- iOS 获取自定义cell上按钮所对应cell的indexPath.row的方法
在UITableView或UICollectionView的自定义cell中创建一button,在点击该按钮时知道该按钮所在的cell在UITableView或UICollectionView中的行数 ...
- iOS中自定义UITableViewCell的用法
1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...
随机推荐
- Go 实现判断变量是否为合法数字 IsNumeric 算法
[转] http://www.syyong.com/Go/Go-to-determine-whether-the-variable-is-a-legal-digital-algorithm.html ...
- Postgresql查询最近12个月、最近30天数据
-- 最近 12 个月 SELECT * FROM 表名 WHERE 日期字段 BETWEEN (now() - INTERVAL '12 months') AND now() -- 最近 30 天 ...
- 数据挖掘_requests模块的get方法
关于requests模块 之前在跟大家讲通过字典列表批量获取数据的时候用过这个模块 安装过程就不再讲解了 requests模块是python的http库,可以完成绝大部分与http应用相关的工作,所以 ...
- 吴恩达深度学习第2课第3周编程作业 的坑(Tensorflow+Tutorial)
可能因为Andrew Ng用的是python3,而我是python2.7的缘故,我发现了坑.如下: 在辅助文件tf_utils.py中的random_mini_batches(X, Y, mini_b ...
- FJUT第四周寒假作业之第一集,临时特工?(深度优先搜索)
原网址:http://210.34.193.66:8080/vj/Contest.jsp?cid=163#P2 第一集,临时特工? TimeLimit:1000MS MemoryLimit:128M ...
- MySQL之sql文件的导入导出
window下 1.导出整个数据库(无需登录mysql)mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > d ...
- 修改hosts立刻生效不必重启
有时我们会通过修改Hosts文件(路径为系统盘:\WINDOWS\system32\drivers\etc\hosts),在修改并保存Hosts文件后需要重启才能使设置生效. 这时可以打开命令提示符 ...
- An internal error occurred during: "Retrieving archetypes:". GC overhead limit exceeded
An internal error occurred during: "Retrieving archetypes:".GC overhead limit exceeded 异常, ...
- 2016年年终CSDN博客总结
2015年12月1日,结束了4个月的尚观嵌入式培训生涯,经过了几轮重重面试,最终来到了伟易达集团.经过了长达3个月的试用期,正式成为了伟易达集团的助理工程师. 回顾一年来的学习,工作,生活.各种酸甜苦 ...
- Premake可生成vcxproj.filters
Premake可生成vcxproj.filters (金庆的专栏) 添加 vcxproj.filters 文件可以用目录结构组织源文件. 例如premake5添加所有文件: files { ...