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 @ 2015-07-09 09:57  wb145230  阅读(6435)  评论(0编辑  收藏  举报