iOSDay30之UITableView编辑

1. UITableView编辑

  1> UITableView 编辑流程

  2> UITableView 编辑步骤(四步)

  ① 第一步 : 让 TableView 处于编辑状态(在按钮点击事件方法中) 

1     // 优化写法
2     // 不带动画
3     _rootView.tableView.editing = !_rootView.tableView.editing;
4     // 带动画
5     [_rootView.tableView setEditing:!_rootView.tableView.editing animated:YES];

  ② 协议设定

   第二步 : 确定cell是否处于编辑状态(UITableViewDataSource协议的方法) 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 所有的cell都可以进行编辑时,整个方法可以省略
    // return YES;

    // 只有第一个分区可以被编辑
    if (0 == indexPath.section) {
        return YES;
    }
    return NO;
}

   第三步 : 设定cell的编辑样式 (删除 , 添加)

1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3     return UITableViewCellEditingStyle枚举中的样式;
4 }

   第四步 : 编辑状态进行添加

1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3     // 1. 处理数据
4     // 2. 更新UI界面
5 }

 3> 添加(前两步通用)

  第三步:  

1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3     return UITableViewCellEditingStyleDelete;
4 }

  第四步:

 1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 2 {
 3         // 1. 删除数据
 4         [_allDataArray[indexPath.section] removeObjectAtIndex:indexPath.row];
 5
 6         // 2. 更新UI
 7         // 单独更新一行(删除)
 8         [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
 9
10         // 全部更新
11 //        [tableView reloadData];
12 }

 4> 删除(前两步通用)

  第三步:

1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3     return UITableViewCellEditingStyleInsert;
4 }

  第四步:

 1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 2 {
 3     // 1. 插入数据到数组中
 4         [_allDataArray[indexPath.section] insertObject:@"你是不是傻" atIndex:indexPath.row + 1];
 5
 6         // 2. 更新UI
 7         // 全部更新
 8 //        [tableView reloadData];
 9
10         // 单独更新一行
11
12         // 创建新一行的NSIndexPath对象
13         NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
14
15         [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationLeft];
16 }

 5>添加 和 删除 结合   

  第三步 : 设置一个 UITableViewCellEditingStyle 类型的 属性(style) 用于存储 添加 和 删除 的编辑的样式, 在 添加 和 删除 对应的点击事件方法中赋值, 注:按钮的功能样式需要在点击事件最上面实现, 否则会出现bug

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return self.style;
}

  第四步 :  

1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3     // 判断编辑样式
4     if (UITableViewCellEditingStyleDelete == editingStyle) {
5         删除操作,详情请见 3> 第四步
6     } else if (UITableViewCellEditingStyleInsert == editingStyle){
7         添加操作,详情请见 4> 第四步
8     }
9 }

 6> 移动

  ① (在 TableView 处于编辑状态下)实现协议: 告诉 tableView 是否能够移动 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

  ② 移动

 1 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
 2 {
 3     // 1. 获取需要修改的数据
 4     NSString *sourceData = [self.allDataArray[sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];
 5
 6     // 2. 先将数据从当前的位置移除
 7     [self.allDataArray[sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];
 8
 9     // 3. 将数据插入到对应的位置
10     [self.allDataArray[destinationIndexPath.section] insertObject:sourceData atIndex:destinationIndexPath.row];
11 }

  bug修正--- 防止跨分区移动

 1 - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
 2 {
 3     // sourceIndexPath 为原位置
 4     // proposedDestinationIndexPath 为将要移动到的位置
 5     if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
 6         return proposedDestinationIndexPath;
 7     } else {
 8         return sourceIndexPath;
 9     }
10 }

2. UITableViewController

 1> 概述

  UITableViewController 是继承于 UIViewController 中的一个类,只不过比UIViewController 中多了一个属性 tableView 。 即: UITableViewController 是一个自带 table 的视图控制器。

 2> 注意事项

  • UITableViewController 继承 UIViewController , 自带一个tableView
  • self.view 不是 UIView  是 UITableView
  • datasource 和 delegate 默认都是 self (UITableViewController)
  • 开发中只需要建 UITableViewController 子类
时间: 2024-12-29 07:31:39

iOSDay30之UITableView编辑的相关文章

UITableView编辑

UITableView 编辑步骤如下: 1.让TableView处于编辑状态 2.协议设定  2.1.确定Cell是否处于编辑状态  2.2.设定Cell的编辑样式(删除.添加) 2.3.编辑状态进?提交 注意: 编辑结束后,由于numberOfRowsInSection这个协议只在 tableview添加到?视图的时候??次,?且table上的数据 都是由数组提供,因此,需要先将数组中的元素删除,然后 让table的协议重新??遍进?重新赋值. 即:先修改数据源,再刷新table(使?relo

IOS第七天(6:UiTableView编辑模式, 拖动位置 ,滑动删除)

**********UiTableView编辑模式, 拖动位置 ,滑动删除 #import "HMViewController.h" @interface HMViewController () <UITableViewDataSource, UITableViewDelegate> /** 数据列表 */ @property (nonatomic, strong) NSMutableArray *dataList; @property (nonatomic, strong

UITableView 编辑

对 UITableView 进行添加,删除,移动,基本操作的流程. 1.初始化 UITableView 步骤: 1> 遵守协议 <UITableViewDelegate,UITableViewDataSource> 2> 设置代理 3> 实现方法 必须实现的方法有两个 - (NSInteger)tableView:numberOfRowsInSection:(设置每个分组的行数)- (UITableViewCell*)tableView: cellForRowAtIndexP

UITableView编辑模式

UITableView有两种模式,普通模式和编辑模式.在编辑模式下可以对cell进行排序.删除.插入等等. 如何进入编辑模式 调用tableView的setEditing(editing: Bool, animated: Bool)方法. 进入编辑模式以后发生了什么 向每个cell发送setEditing:animated:方法 进入编辑模式以后cell的变化 普通模式下cell的contentview的bounds就是cell的bounds. 编辑模式下,cell有三部分组成,左边的Editi

iOS - UITableView 编辑(cell的插入, 删除, 移动)

UITableView Cell的插入/删除 核心API Class : UITableView Delegate : UITableViewDataSource, UITableViewDelegate 涉及的API:(API的官方详细注释详见本章结尾) /** TableView 进入或退出编辑状态(TableView 方法). */ - (void)setEditing:(BOOL)editing animated:(BOOL)animate /** 确定哪些行的cell可以编辑 (UIT

UITableView 编辑模式(增加-删除-移动---自定义左滑 title)

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.dataArray = [NSMutableArray arrayWithArray: @[@"1",@"2",@"3",@"4",@"5",@"6"

UITableView编辑的实现原理和删除

一:执行过程 1,tableView进入编辑状态 用户点击一个按钮,让程序进入编辑状态, self.tableView.editing = YES; 2,询问tableView的cell能否编辑 tableView询问dataSource代理,让它执行一个代理方法询问每一行的编辑状态 即-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath //默认为yes,即在editin

UITableView编辑 增删改查

@interface RootTableViewController () @property (nonatomic , retain) NSMutableArray *dataArray; //用数组管理表视图将要显示的数据 @end @implementation RootTableViewController //新的重用机制格式 //1.定义全局区的静态重用标识符 static NSString *identifier = @"CELL"; //重写属性的getter方法 - 

第九章 UITableView编辑模式笔记

一,tableview自带编辑模式,可以添加.删除.移动item 二,可以添加section或者table的header和footer 三,使用interface Builder创建header的layout 四,UITableView显示header前,会向它的controller发送headerVIew消息 - (UIView *)headerView { // If you have not loaded the headerView yet... if (!_headerView) {