通过改变要隐藏的item的高度实现隐藏和显示item
1.创建UITableView
#import "ViewController.h" @interface ViewController () @property(nonatomic, strong)UITableView *tableView; @property(nonatomic, assign)BOOL isHiddenItem; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.isHiddenItem = NO; self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; [self.view addSubview:self.tableView]; }
2.UITableView delegate, 具体的实现方法都已经加了注释
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // 把要隐藏的item的高度设置为0 if (indexPath.row == 2 && self.isHiddenItem) { return 0; } return 100; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; } if (indexPath.row == 0) { cell.textLabel.text = @"点击0行的时候隐藏第2行"; } else if(indexPath.row ==1) { cell.textLabel.text = @"点击1行的时候显示第2行"; } else { cell.textLabel.text = [NSString stringWithFormat:@"当前行数%ld",indexPath.row]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) { // 标示是否被隐藏 self.isHiddenItem = YES; // 获取要隐藏item的位置 NSIndexPath *tmpPath = [NSIndexPath indexPathForRow:indexPath.row + 2 inSection:indexPath.section]; [UIView animateWithDuration:0.3 animations:^{ [self.tableView cellForRowAtIndexPath:tmpPath].alpha = 0.0f; } completion:^(BOOL finished) { // 隐藏的对应item [[self.tableView cellForRowAtIndexPath:tmpPath] setHidden:YES]; // 刷新被隐藏的item [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:tmpPath] withRowAnimation:UITableViewRowAnimationFade]; }]; NSLog(@"点击了第0行"); } else if (indexPath.row == 1){ self.isHiddenItem = NO; NSIndexPath *tmpPath = [NSIndexPath indexPathForRow:indexPath.row + 2 inSection:indexPath.section]; [UIView animateWithDuration:0.3 animations:^{ [self.tableView cellForRowAtIndexPath:tmpPath].alpha = 1.0f; } completion:^(BOOL finished) { [[self.tableView cellForRowAtIndexPath:tmpPath] setHidden:YES]; [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:tmpPath] withRowAnimation:UITableViewRowAnimationFade]; }]; NSLog(@"点击了第1行"); } }
3.效果
如果你不是在wb145230博客园看到本文,请点击查看原文.