UITableView 代码

【1】拖入ToolBar,TableView

【2】连线,设置代理模式,数据源等(ToolBar中的垃圾桶也需要连接方法removeRow)

  

【3】代码

1.声明

mydata    :所有的数据,人工初始化的数据30行。
selectedData:选中的数据,视频中点击后选中的数据
selectedRows:只是为了删除时候能得到所选择的数据行而创建的数组
@interface ViewController ()
// 所有的总数据
@property (strong,nonatomic) NSMutableArray *mydata;
// 选中的数据
@property (strong,nonatomic) NSMutableArray *selectedData;// 拿到被选中的数据内容
/********* 这个是用来显示删除动画而选中的数据行 ********/
@property (strong,nonatomic)NSMutableArray *selectedRows;
@end

2.初始化数据

- (void)viewDidLoad
{[super viewDidLoad];// 初始化数据self.mydata=[NSMutableArray array];self.selectedData=[NSMutableArray array];self.selectedRows=[NSMutableArray array];  //创建30个对象存放到数组mydata中去   for(int i=0;i<30;i++){NSString *text=[NSString stringWithFormat:@"哈哈哈--%d",i];[self.mydata addObject:text];}
}

3.设置返回行数

#pragma mark- 数据源方法
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return self.mydata.count;
}

4.如图灰色的请详见【UITableView】性能优化 主要功能为:判断选中的需要不需要打钩

#pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{// 0.用static修饰的局部变量,只会初始化一次< # # >static NSString *ID = @"Cell";// 1.拿到一个标识先去缓存池中查找对应的CellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];// 2.如果缓存池中没有,才需要传入一个标识创建新的Cellif (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];} 

  // 取出当前这行数据【判断是否打钩】NSString *curentText=self.mydata[indexPath.row];// 3.覆盖数据cell.textLabel.text = self.mydata[indexPath.row];

   // 4.覆盖状态【判断是否打钩】if([self.selectedData containsObject:curentText]) // 判断选中的这行数据内容和我数组里面的内容是否相等,如果相等
    {//需要打钩cell.accessoryType=UITableViewCellAccessoryCheckmark;}else{cell.accessoryType=UITableViewCellAccessoryNone;}return cell;
}

5.选中方法,调用,需要使用代理监听

/******************************************** 刷新,更新界面 *************************/
 [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; 
// 刷新当前行
 [tableView reloadData];  
// 全局刷新
 
#pragma mark- 代理方法
#pragma mark 该方法选中某一行就会调用
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{// 1.通过代码取消选中当前这行(去掉蓝色背景)【点击一下背景变蓝色,闪烁一下】[tableView deselectRowAtIndexPath:indexPath animated:YES];   // animated 是否需要动画// 2.取出这行对应的数据NSString *currentText = self.mydata[indexPath.row];// 3【新】.应用MVC修改数据控制界面内容if([self.selectedData containsObject:currentText]){// 删除数据
           [self.selectedData removeObject:currentText];/****显示删除动画的数组中移除这个行****/[self.selectedRows removeObject:indexPath];}else{// 添加数据
           [self.selectedData addObject:currentText];/****显示删除动画的数组中添加这个行****/[self.selectedRows addObject:indexPath];}/************************ 刷新,更新界面 *************************/[tableView reloadRowsAtIndexPaths:@[indexPath] // 刷新这一行withRowAnimation:UITableViewRowAnimationMiddle]; // 刷新当前行// [tableView reloadData];   // 全局刷新
}
  //【与上面【3】新,同样的操作】
 /*************下面注释掉的是直接进行界面的更改,违反了MVC模式,所以不建议使用**************//*// 3.让选中的行打钩,对应的cell打钩UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];   // 这个方法就是通过indexPath得到所// 判断selectedData数组中是否包含currentText,如果已经包含(说明已经打钩)if([self.selectedData containsObject:currentText]){// 取消打钩cell.accessoryType=UITableViewCellAccessoryNone;// 删除数据[self.selectedData removeObject:currentText];}else{// 没有包含这行数据,(说明没有打钩)//  打钩cell.accessoryType=UITableViewCellAccessoryCheckmark;// 添加数据[self.selectedData addObject:currentText];}*/

6.设置点击垃圾桶按钮操作

注意:

作用 代码 注意事项
刷新选中单行
[self.tableView reloadRowsAtIndexPaths:self.selectedRowswithRowAnimation:UITableViewRowAnimationMiddle];
数据个数要保持不变,否则也要报错
删除选中单行
[self.tableView deleteRowsAtIndexPaths:self.selectedRows withRowAnimation:UITableViewRowAnimationLeft];
比如说,移除了3行,那么对应的数组中也需要移除3行。
#pragma mark - 按垃圾桶删除对应的行
-(IBAction)removeRow
{// 删除数据分两步// 1.更改数据
    [self.mydata removeObjectsInArray:self.selectedData];// 2.刷新UI界面// [self.tableView reloadData];/*******这个方法的要求:再数据count不变。刷新固定的那几行********//*【[self.tableView reloadRowsAtIndexPaths:self.selectedRowswithRowAnimation:UITableViewRowAnimationMiddle];】*//*******这个方法的要求:这个使用需要也是数组中删除一定的数据(这个方法里挪掉多少个,数据也要挪掉多少个)********/[self.tableView deleteRowsAtIndexPaths:self.selectedRows withRowAnimation:UITableViewRowAnimationLeft];// 3.清除选中的所有数据
    [self.selectedData removeAllObjects];[self.selectedRows removeAllObjects];
}

其他:

  遵循协议后【取消选中将监听的方法】

#pragma mark 取消选中
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"取消选中了%d",indexPath.row);
}

转载于:https://www.cnblogs.com/madeininfi/p/3669682.html

【UIKit】UITableView 5相关推荐

  1. 【UIKit】UITableView 自定义Cell2

    [自定义Cell2][Code]:全部通过代码添加 [1]:设置Cell 1):创建一个MsgCell类 继承UITableViewCell .h中声明2个属性一个是用户头像,另外一个是发表的文字 ...

  2. 【UIKit】UITableView 1

    UITableView:代码 section:组别 row:行号 [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableV ...

  3. 【UIKit】UITableView.02

    UITableView.02: [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableView的数据源协议<UITab ...

  4. 【UIKit】UITableView 3

    UITableView 代码 [1]拖入一个UITableView [2]将TableView的dataSource与控制器连接 [3]首先得遵循UITableView的数据源协议<UITab ...

  5. 【UIKit】UITableView.06

    UITableView.06: [1]拖入ToolBar,TableView [2]连线,设置代理模式,数据源等(ToolBar中的垃圾桶也需要连接方法removeRow) [3]代码 1.声明 my ...

  6. 【UIKit】表格 UITableView

    UITableView的使用介绍 官方文档:Table View Programming Guide for iOS UITableView基本使用基本步骤 准备数据源的数组 遵循的协议UITable ...

  7. 【UIKit】表格自定义单元格(UITableViewCll)

    自定义表格单元格(Cell)操作 使用NIb文件自定义单元格(Cell) 1.          创建UITableViewCell的子类,创建的同时记得选择生成xib文件(当然你也可以将控件通过代码 ...

  8. 【UIKit】UIView基础学习

    UIView基础介绍 官网文档: View programming Guide for iOS UIView Class Reference [常用属性和方法] UIKit User Interfac ...

  9. 【UIKit】文本框(UITextField)及键盘遮挡处理和回收

    文本框(UITextField)及键盘遮挡处理和回收 文本框属性 官网文档:UITextField Class Reference 以下都是可以在IB中选择设置的,也可以使用代码编写 placehol ...

  10. 【UIKit】TabView

    [TabView] [下面的tab栏][code] [第一步]:创建一个Tabbed Application [第二步]:加入图片素材. [第三步]:创建3个有xib的类文件 FirstViewCo ...

最新文章

  1. 与基础事务管理器的通信失败 存货申请_金九银十跳槽季,恶补分布式事务
  2. .Net Core 之 MSBuild 介绍
  3. D3DXMatrixMultiply 函数
  4. mysql load source_再说说LOAD和SOURCE
  5. 相机标定(三)—— 正交投影和透视投影变换
  6. 第二季-专题7-ARM跑快了---时钟初始化
  7. 一次性掌握计算机中常见的六类指令
  8. RestClient的简单介绍
  9. 英特尔图形安装程序的linux,如何在我的系统中安装英特尔图形驱动程序?
  10. 输入年份和月份输出该月有多少天python_题目内容:读入一个年份和月份,输出该月有多少天(考虑闰年),用s? 爱问知识人...
  11. 运筹帷幄DB2——从Oracle运维转型
  12. 【独立后台】2021全新最火表情包小程序源码,无限裂变,斗图小程序,头像壁纸,外卖服务内附详细搭建教程
  13. php依赖注入框架pimple中文文档
  14. python画venn图
  15. 练习题 斐波那契数列
  16. 推荐几部好看的漫画,漫迷们不容错过的动漫新番哦
  17. 05_CSS 盒模型
  18. 单目标跟踪 (一)相关滤波器 方法综述
  19. 办公软件——隐私条款
  20. 如何使用pycharm连接Databricks

热门文章

  1. 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
  2. axure 鼠标样式_Axure教程:简单开关按钮的实现
  3. JavaScript实现map
  4. Solr学习总结(五)SolrNet的基本用法及CURD
  5. 替代top的系统监控工具glances
  6. 一封来自老男孩的学生的辞职信!
  7. 如何在 Windows 显示扩展名?
  8. yum [Errno -1] Metadata file does not match checksum
  9. 远程桌面无法连接方案
  10. 1、两数之和(python)