通過改變要隱藏的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博客園看到本文,請點擊查看原文.