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博客园看到本文,请点击查看原文.

posted @   wb145230  阅读(6445)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示