通过改变要隐藏的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 == && self.isHiddenItem) {
return ;
}
return ;
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return ;
} -(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 == ) {
cell.textLabel.text = @"点击0行的时候隐藏第2行";
} else if(indexPath.row ==) {
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 == ) {
// 标示是否被隐藏
self.isHiddenItem = YES; // 获取要隐藏item的位置
NSIndexPath *tmpPath = [NSIndexPath indexPathForRow:indexPath.row + 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 == ){ self.isHiddenItem = NO; NSIndexPath *tmpPath = [NSIndexPath indexPathForRow:indexPath.row + 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博客园看到本文,请点击查看原文.

iOS UITableView动态隐藏或显示Item的更多相关文章

  1. 关于iOS导航控制器隐藏和显示会出现返回键失效,导航栏标题动画异常

    最近做的demo  bug出现了,我觉得这个bug出现得很经典所以贴出来给大家看看, bug演示就是:点击返回键失效出现如下gif图演示的内容 为啥会出现如此奇葩的bug,系统的返回键居然失效了,尴尬 ...

  2. JQuery动态隐藏和显示DIV

    <head> <script language="javascript"> function HideWeekMonth() { $("#tt1& ...

  3. react中如何实现一个按钮的动态隐藏和显示(有效和失效)

    初始准备工作 constructor(props) { super(props); /* * 构建导出数据的初始参数,结合用户下拉选择后动态设置参数值 * */ this.state = { btnS ...

  4. datagrid其中某列需要动态隐藏或显示的mvvm绑定方式,也可以用在其他表格类型控件上

    版权归原作者所有. 引用地址 [WPF] HOW TO BIND TO DATA WHEN THE DATACONTEXT IS NOT INHERITED MARCH 21, 2011 THOMAS ...

  5. iOS UITableView表视图滚动隐藏UINavigationController导航栏

    UITableView 继承于UIScrollView 所以UIScrollView 的代理方法相同适用于UITableView 中 隐藏导航栏的方法为: self.navigationControl ...

  6. iOS UITableView 与 UITableViewController

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...

  7. iOS UITableView优化

    一.Cell 复用 在可见的页面会重复绘制页面,每次刷新显示都会去创建新的 Cell,非常耗费性能.  解决方案:创建一个静态变量 reuseID,防止重复创建(提高性能),使用系统的缓存池功能. s ...

  8. React-Native 之 GD (四)使用通知方式隐藏或显示TabBar

    1.GDHalfHourHot.js  发送通知 /** * 近半小时热门 */ import React, { Component } from 'react'; import { StyleShe ...

  9. IOS 公共类-MyMBProgressUtil Progress显示

    IOS 公共类-MyMBProgressUtil Progress显示 此公共类用于显示提示框,对MBProgress的进一步封装.可以看下面的代码 接口: @interface MyMBProgre ...

随机推荐

  1. [Vue] Use Vue.js Component Computed Properties

    You can add computed properties to a component to calculate a property on the fly. The benefit of th ...

  2. [React Router v4] Parse Query Parameters

    React Router v4 ignores query parameters entirely. That means that it is up to you to parse them so ...

  3. epoll 和select

    epoll 水平触发和边缘触发的区别 EPOLLLT——水平触发EPOLLET——边缘触发 epoll有EPOLLLT和EPOLLET两种触发模式,LT是默认的模式,ET是“高速”模式.LT模式下,只 ...

  4. MOCHIWEB与COWBOY使用JSON

    http://4096.info/2014/05/28/mochiweb%E4%B8%8Ecowboy%E4%BD%BF%E7%94%A8json/ 服务器原来的socket实现机制更改为ranch了 ...

  5. Java Web 实用返回结果封装

    实用的返回结果封装 使用示例 效果 Result ResultEnum 使用示例 /** * @Author: huangwenjun * @Description: * @Date: Created ...

  6. hbase 判断列族是否存在

    public static boolean isExistColumnFamily(String tableName,String cf) throws IOException { if(isExis ...

  7. oracle常规任务

    # su - oracle  oracle> sqlplus "/as sysdba"  SQL> exec dbms_scheduler.disable('MONDA ...

  8. Cross-Domain Security For Data Vault

    Cross-domain security for data vault is described. At least one database is accessible from a plural ...

  9. &lt;模拟电子学习1&gt;Multisim 12.0 结构和仿真51最小的单芯片系统

    周围环境: 系统环境: win7 64位置 软件平台:Multisim 12.0 目的: 刚毕业,可是模电知识也忘得差点儿相同了,加之自己想搞搞硬件设计.假设仅仅是看模电书.不实践,还是终觉浅.当做兴 ...

  10. Maven环境下Poi的使用

    Poi的使用方法,网上还是挺多的,官网也有教程. 附一个比较全的: http://www.cnblogs.com/vTree/archive/2011/11/30/2268721.html 需要说明的 ...