指定根視圖:
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;
}
}
- (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];
}
//.h #import@class WGModel; @interface WGCell : UITableViewCell @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; }
//.h #import@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
