iOS UITableView动态隐藏或显示Item
通过改变要隐藏的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博客园看到本文,请点击查看原文.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战