iOS中 自定义cell升级版 (高级)

接上次分享的自定义cell进行了优化:

指定根视图:

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:@""];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类

环境不会改变,解决之道在于改变自己。

iOS中 自定义cell升级版 (高级)

相关文章:

你感兴趣的文章:

标签云: