您所在的位置:小祥子 » 编程 » IOS » 正文

iOS UITableView动态隐藏或显示Item

时间:2015-07-09 编辑:wb145230 来源:Cnblogs

通过改变要隐藏的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博客园看到本文,请点击查看原文.

关键词:Table 动态 隐藏 显示