UITableView表视图编辑

表视图编辑的使用场景

当我们需要手动添加或者删除某条数据到tableView中的时候,就可以使用tableView编辑.比如微信 扣扣中删除和某人的通话

当我们需要手动调整单元格的顺序时,就可以通过tableView移动,移动单元格到指定位置

代理AppDelegate.m中代码

#import "AppDelegate.h"
#import "RootViewController.h"
@implementation AppDelegate
-(void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor]; RootViewController *rootVC = [[RootViewController alloc] init];
UINavigationController *ngVC = [[UINavigationController alloc] initWithRootViewController:rootVC];
self.window.rootViewController = ngVC; [ngVC release];
[rootVC release]; [self.window makeKeyAndVisible];
return YES;
}

RootViewController.h中建立一个可变数组属性

NSMutableArray *_mArr;

RootViewController.m中初始化和loadView代码

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.navigationItem.title = @"百家讲坛";
self.navigationItem.rightBarButtonItem = self.editButtonItem;//控制器自带的编辑按钮
_mArr = [[NSMutableArray alloc] initWithObjects:@"赵",@"钱",@"孙",@"李",@"周",@"武",@"郑",@"王",@"唐僧",@"孙悟空",@"猪八戒",@"沙僧",@"小白龙",@"二郎神",@"哪吒",@"雷震子", nil];
// Custom initialization
}
return self;
}
-(void)loadView
{ UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(, , , ) style:UITableViewStyleGrouped];
table.dataSource = self;
table.delegate = self;
self.view = table;
[table release]; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_mArr count];
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"reuse";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.textLabel.text = [_mArr objectAtIndex:indexPath.row];
// tableView.editing = YES;
//cell右侧属性
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}

编辑的步骤

1.让tableView处于编辑状态

-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
//调用父类方法,实现edit和done的变换
[super setEditing:editing animated:animated];
UITableView *tableView = (UITableView *)self.view;
[tableView setEditing:editing animated:animated];
}

2.指定tableView那些行可以编辑

 //设置cell的可编辑状态,默认是yes
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// if (indexPath.row == 0) {
// return YES;
// }
return YES;
}

3.指定tableView的编辑的样式(添加.删除)

//delegate中得方法
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row ==) {
return UITableViewCellEditingStyleInsert;//添加
}
return UITableViewCellEditingStyleDelete;//删除
}

4.编辑完成(先操作数据源,后修改UI)

//点击加号或者delete时触发的事件
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[tableView beginUpdates];
//删除数据 (写在删除cell前面 或者写一个[tableView beginUpdates]放前面一个[tableView endUpdates]放后面)
[_mArr removeObjectAtIndex:indexPath.row];
//删除cell
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
[tableView endUpdates];
NSLog(@"删除");
}else{
[tableView beginUpdates];
[_mArr insertObject:@"hello" atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
[tableView endUpdates]; NSLog(@"添加");
}
}

表视图的移动

移动的步骤

1.让tableView处于编辑状态

-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
//调用父类方法,实现edit和done的变换
[super setEditing:editing animated:animated];
UITableView *tableView = (UITableView *)self.view;
[tableView setEditing:editing animated:animated];
}

2.指定tableView哪些行可以移动

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

3.移动完成

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
NSString *str = [_mArr objectAtIndex:sourceIndexPath.row]; //引用计数加1.避免出现野指针
[str retain]; //删除元素
[_mArr removeObjectAtIndex:sourceIndexPath.row];
//插入元素
[_mArr insertObject:str atIndex:destinationIndexPath.row]; [str release];//释放之前,retain的对象
}

监测移动过程,实现限制跨区移动

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
NSLog(@"%d",sourceIndexPath.row);
NSLog(@"%d",proposedDestinationIndexPath.row);
if (sourceIndexPath.row == [_mArr count]-) {
return sourceIndexPath;
}else{
return proposedDestinationIndexPath;
}
}

UITableViewController表视图控制器

继承自UIViewController

自带一个tableView,根视图就是tableView

模板自带编辑移动相关的代码

UI学习笔记---第十天UITableView表视图编辑的更多相关文章

  1. UI学习笔记---第十一天UITableView表视图高级-自定义cell

    自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代 ...

  2. UITableView 表视图编辑

    UITableViewController(表视图控制器)继承自UIViewController,自带一个tableView self.view不是UIView而是UITableView dataso ...

  3. ui学习笔记---第十五天数据库

    数据库的使用 常见的数据库有MySQL       SQL Server       SQLite      Oralce等 在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火 ...

  4. JavaScript高级程序设计学习笔记第十四章--表单

    1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...

  5. UI学习笔记---第十六天XML JSON解析

    一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...

  6. UI学习笔记---第十四天数据持久化

    一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查 ...

  7. Spring 学习笔记(十)渲染 Web 视图 (Apache Tilesa 和 Thymeleaf)

    使用Apache Tiles视图定义布局 为了在Spring中使用Tiles,需要配置几个bean.我们需要一个TilesConfigurer bean,它会负责定位和加载Tile定义并协调生成Til ...

  8. UI学习笔记---第九天UITableView表视图

    UITableView表视图 一.表视图的使用场景 表视图UITableView是iOS中最重要的视图,随处可见,通常用来管理一组具有相同数据结构的数据 表视图继承自UIScrollView,所以可以 ...

  9. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

随机推荐

  1. Flume Hello World!

    Flume 是 Cloudera 公司开源出来的一套日志收集系统.模型如下所示: 图中Source,Sink分别代表数据源和数据目的地,channel表示Source和Sink之间的通道.配置文件为/ ...

  2. Difference between Linearizability and Serializability

    原文:http://stackoverflow.com/questions/8200015/what-is-the-difference-between-serializability-and-lin ...

  3. SQL远程创建数据库

    CREATE PROCEDURE [dbo].[p_CreateDB]   @Des_DB sysname,  @ServerName sysname=N'',  @UserName sysname= ...

  4. S1 : 递归

    递归函数是在一个函数通过名字调用自身的情况下构成的,如下所示 function f(num){ if(num<=1){ return 1; } else { return num*f(num-1 ...

  5. 二模 (3) day2

    第一题: 题目大意:(难以概括,就不贴了把.) 解题过程: 1.担心被精度问题恶心,就把平均数的地方乘了N,这样只有最后计算的时候才会是小数.. 2.数组保存的时候蛋疼的 没改成double.结果全部 ...

  6. Redis系列-存储篇list主要操作函数小结

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  7. lucene 查询的使用

    各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...

  8. 构建者模式(Builder)示例代码

    package com.test; /** * Created by xiaonanhai on 2015/5/30. */ public class Builder { private String ...

  9. IOS多线程之NSOperation学习总结

    NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...

  10. 关于 IOS 发布的点点滴滴记录(一)

    今天又是发布 APP 审核的时候,哎,说来也悲催. 我们产品连这次好像是第四次被苹果公司拒绝了,想想都有点伤感.其实对于里面的内容我到是不是很关心.我关心的是在这过程中我所碰到的奇怪的事情.  (这次 ...