UITableView 编辑

对 UITableView 进行添加,删除,移动,基本操作的流程.

1.初始化 UITableView 步骤:

  1> 遵守协议 <UITableViewDelegate,UITableViewDataSource>

  2> 设置代理

  3> 实现方法 必须实现的方法有两个 - (NSInteger)tableView:numberOfRowsInSection:(设置每个分组的行数)- (UITableViewCell*)tableView: cellForRowAtIndexPath: (设置每行的显示)

2.对 tableView 进行增删移动操作 (通过实现协议方法)

  1>设置是否可编译 - (BOOL)tableView: canEditRowAtIndexPath: 返回 YES 可以编辑,返回 NO 不可编辑

  2>设置编辑的类型 - (UITableViewCellEditingStyle)tableView: editingStyleForRowAtIndexPath: 返回 UITableViewCellEditingStyleDelete 删除操作,UITableViewCellEditingStyleInsert 添加操作

  3>完成编辑操作:

    添加和删除操作相似,实现 - (void)tableView: commitEditingStyle: forRowAtIndexPath: 在进行操作时,一定是先对数据操作,然后操作 Cell

      删除操作:(实例方法)deleteSections: withRowAnimation: 删除分组  deleteRowsAtIndexPaths: withRowAnimation: 删除行

      添加操作:(实例方法)insertRowsAtIndexPaths: withRowAnimation: 添加行

    移动操作:- (void)tableView: moveRowAtIndexPath: toIndexPath:在进行操作时,一定是先对数据操作,然后操作 Cell

      移动操作:数据处理过程:先存储要移动数据,删除原数据,插入数据

      调用实例方法:moveRowAtIndexPath: toIndexPath: 两个参数 原位置,要移动到的位置

      限定移动的范围:- (NSIndexPath*)tableView: targetIndexPathForMoveFromRowAtIndexPath: (如果限定在同一分组内移动,判断传入的参数的 section 是否相等,(第一个参数原位置,第二个参数要移动的位置),相等返回要移动到的位置,不同返回原位置.

个人写的一个简单的实现代码:

  1 //
  2 //  RootViewController.m
  3 //  Lesson10_HomeWork
  4 //
  5 //  Created by Ager on 15/10/26.
  6 //  Copyright © 2015年 Ager. All rights reserved.
  7 //
  8
  9 #import "RootViewController.h"
 10
 11 @interface RootViewController ()
 12 {
 13     UITableViewCellEditingStyle style; //表示对 table 的操作类型
 14     BOOL addFlag; //表示 addButton 按钮的状态
 15 }
 16
 17 @end
 18
 19 @implementation RootViewController
 20
 21 - (void)loadView{
 22     self.rootView = [[RootView alloc]initWithFrame:[UIScreen mainScreen].bounds];
 23     self.view = self.rootView;
 24 }
 25
 26 - (void)viewDidLoad {
 27     [super viewDidLoad];
 28     // Do any additional setup after loading the view.
 29
 30     //设置代理
 31     self.rootView.tableView.delegate = self;
 32     self.rootView.tableView.dataSource = self;
 33
 34     //初始化数据
 35     self.DataArray = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DataArray" ofType:@"plist"]];
 36
 37     //添加删除触发按钮
 38     self.navigationItem.rightBarButtonItem = self.editButtonItem;
 39     self.editButtonItem.title = @"删除";
 40
 41     //添加 添加数据按钮
 42     UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWithTitle:@"添加" style:UIBarButtonItemStylePlain target:self action:@selector(insertAction:)];
 43     addFlag = NO;
 44     self.navigationItem.leftBarButtonItem = addButton;
 45
 46
 47 }
 48
 49 #pragma mark --- 实现代理方法 ---
 50
 51 #pragma mark --- 必须实现的方法 ---
 52
 53
 54 /**
 55  *  每组数据的行数
 56  */
 57
 58 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
 59     return [[self.DataArray objectAtIndex:section] count];
 60 }
 61
 62
 63 /**
 64  *  设置cell
 65  */
 66
 67 - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 68     static NSString *cell_id = @"cell_id";
 69     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cell_id];
 70     if (!cell) {
 71         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cell_id];
 72     }
 73
 74     cell.textLabel.text = [[self.DataArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
 75     return cell;
 76 }
 77
 78
 79 #pragma mark --- 不必须实现的代理方法 ---
 80
 81 /**
 82  *  分组数
 83  */
 84
 85 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
 86     return [self.DataArray count];
 87 }
 88
 89
 90 #pragma mark --- 对 TableView 编辑 ---
 91
 92
 93 /**
 94  *  设置是否可以编辑
 95  */
 96 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
 97     return YES;
 98 }
 99
100
101 /**
102  *  设置编辑类型
103  */
104 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
105     return style;
106 }
107
108
109 /**
110  *  完成 TableView 操作
111  */
112 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
113     //修改数据,修改UI
114     //先修改数据,在修改UI
115
116     if (editingStyle == UITableViewCellEditingStyleDelete) {
117         //删除行
118         if ([[self.DataArray objectAtIndex:indexPath.section] count] == 1) {
119             //删除分组
120             [self.DataArray removeObjectAtIndex:indexPath.section];
121             [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationRight];
122         }else {
123
124             //删除单行
125             [[self.DataArray objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
126             [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationRight];
127         }
128     }else if (editingStyle == UITableViewCellEditingStyleInsert){
129         //添加数据
130         //添加一行
131         [[self.DataArray objectAtIndex:indexPath.section] insertObject:@"Ager" atIndex:indexPath.row];
132         [tableView insertRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationRight];
133     }
134 }
135
136
137 #pragma mark --- cell 移动 ---
138
139
140 /**
141  *  移动行
142  *
143  */
144 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
145
146     //先存储要移动的数据
147     NSString *str = [[self.DataArray objectAtIndex:sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];
148     //删除原数据
149     [[self.DataArray objectAtIndex:sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];
150     //在要移动到地方添加数据
151     [[self.DataArray objectAtIndex:destinationIndexPath.section] insertObject:str atIndex:destinationIndexPath.row];
152     [tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath];
153 }
154
155
156 /**
157  *  限定移动范围
158  */
159 - (NSIndexPath*)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath{
160     if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
161         return proposedDestinationIndexPath;
162     }else {
163         return sourceIndexPath;
164     }
165 }
166
167
168 #pragma mark --- 添加按钮的方法实现 ---
169
170
171 /**
172  *  点击删除按钮
173  */
174 - (void)setEditing:(BOOL)editing animated:(BOOL)animated{
175
176     style = UITableViewCellEditingStyleDelete;
177     [super setEditing:editing animated:animated];
178     //关联 tableView
179     [self.rootView.tableView setEditing:editing animated:animated];
180     self.editButtonItem.title = editing ? @"完成":@"删除";
181 }
182
183
184 /**
185  *  点击添加按钮
186  */
187 - (void)insertAction:(UIBarButtonItem *)sender{
188     style = UITableViewCellEditingStyleInsert;
189     addFlag = !addFlag;
190     [self.rootView.tableView setEditing:addFlag animated:YES];
191     sender.title = addFlag ? @"完成":@"添加";
192 }
193
194 - (void)didReceiveMemoryWarning {
195     [super didReceiveMemoryWarning];
196     // Dispose of any resources that can be recreated.
197 }
198
199 /*
200 #pragma mark - Navigation
201
202 // In a storyboard-based application, you will often want to do a little preparation before navigation
203 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
204     // Get the new view controller using [segue destinationViewController].
205     // Pass the selected object to the new view controller.
206 }
207 */
208
209 @end
时间: 2024-10-12 23:16:10

UITableView 编辑的相关文章

UITableView编辑

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

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.edi

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

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

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) {