AppDelegate.m指定根视图
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];
//根视图
RootTableViewController.m
#import "RootTableViewController.h" #import "TestCell.h" #import "TestModel.h" @interface RootTableViewController () @property (nonatomic, strong) NSMutableArray *datasourceArray; @end @implementation RootTableViewController - (void)viewDidLoad { [super viewDidLoad]; self.datasourceArray = [NSMutableArray array]; [self.tableView registerClass:[TestCell class] forCellReuseIdentifier:@"cell"]; for (int i = 0; i < 50; i++) { TestModel *model = [TestModel new]; model.isShow = NO; [self.datasourceArray addObject:model]; } }
#pragma mark - Table view data source
数据源方法
#pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return self.datasourceArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TestCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; TestModel *model = self.datasourceArray[indexPath.row]; if (model.isShow) { cell.label.text = @"展示view"; [cell addView]; } else { cell.label.text = @"什么都没有"; [cell removeView]; } return cell; }
返回高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { TestModel *model = self.datasourceArray[indexPath.row]; if (model.isShow) { return 300; } else { return 100; } }
点击cell触发的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { TestModel *model = self.datasourceArray[indexPath.row]; model.isShow = !model.isShow; [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; }
准备一个自定义cell
#import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (nonatomic, strong) UILabel *label; @property (nonatomic, strong) UIView *redView; - (void)addView; - (void)removeView; @end #import "TestCell.h" @implementation TestCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self addAllViews]; } return self; } - (void)addAllViews { self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 100)]; self.label.backgroundColor = [UIColor yellowColor]; [self addSubview:self.label]; self.redView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 200)]; self.redView.backgroundColor = [UIColor redColor]; } - (void)addView { [self addSubview:self.redView]; } - (void)removeView { [self.redView removeFromSuperview]; }
准备一个model类
#import <Foundation/Foundation.h> @interface TestModel : NSObject @property (nonatomic, assign) BOOL isShow; @end
最终效果如下:
有好的建议和问题可微博私信:http://weibo.com/hanjunqiang