UI学习笔记---第十天UITableView表视图编辑
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表视图编辑的更多相关文章
- UI学习笔记---第十一天UITableView表视图高级-自定义cell
自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代 ...
- UITableView 表视图编辑
UITableViewController(表视图控制器)继承自UIViewController,自带一个tableView self.view不是UIView而是UITableView dataso ...
- ui学习笔记---第十五天数据库
数据库的使用 常见的数据库有MySQL SQL Server SQLite Oralce等 在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火 ...
- JavaScript高级程序设计学习笔记第十四章--表单
1.在 HTML 中,表单是由<form>元素来表示的,而在 JavaScript 中,表单对应的则是 HTMLFormElement 类型. HTMLFormElement 继承了 HT ...
- UI学习笔记---第十六天XML JSON解析
一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...
- UI学习笔记---第十四天数据持久化
一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查 ...
- Spring 学习笔记(十)渲染 Web 视图 (Apache Tilesa 和 Thymeleaf)
使用Apache Tiles视图定义布局 为了在Spring中使用Tiles,需要配置几个bean.我们需要一个TilesConfigurer bean,它会负责定位和加载Tile定义并协调生成Til ...
- UI学习笔记---第九天UITableView表视图
UITableView表视图 一.表视图的使用场景 表视图UITableView是iOS中最重要的视图,随处可见,通常用来管理一组具有相同数据结构的数据 表视图继承自UIScrollView,所以可以 ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
随机推荐
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- Hibernate中的一对一映射
1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...
- 本节向大家介绍一下UML建模误区
本节向大家介绍一下UML建模误区,这里向大家介绍九个误区,希望通过本节的学习,你对UML建模有清晰的认识,以免在以后使用过程中产生不必要的麻烦.下面让我们一起来看一下这些建模误区吧. UML建模误区 ...
- VMware-workstation-full-10.0.3-1895310 CN
Name: VMware-workstation-full-10.0.3-1895310.exe发行日期: 2014-07-01内部版本号: 1895310文件大小: 491 MB文件类型: exe ...
- C# CsvFile 类
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- SQL Server 2008 定时作业的制定(SQL2005参考此方法) 转
-- Author : htl258(Tony)-- Date : 2010-04-29 19:07:45-- Version:Microsoft SQL Server 2008 (RTM) ...
- 《day12---异常》
//91-面向对象-异常-异常的发生和简单应用. /* 异常: java运行时期发生的问题就是异常. Java中运行时的除了异常Exception含有错误Error. 异常:通常发生后可以有针对性的处 ...
- alpha,hidden,opaque的一些认识
如果opaque设置为YES,那么视图会被当做全视图来对待,系统会重绘整个视图 如果opaque设置为NO,那么系统会减少开销,以其中的内容来判定重绘的视图 如果把视图的背景色设置为透明那个,那么op ...
- bistu新生-1005
#include "stdio.h"#include "string.h"int main(){ char ku[]={'0','1','2','3','4', ...
- webservice实验一
实验目的:安装jdk1.6_21以后的版本,利用JAX-WS API自己发布webservice并调用,以及用wsimport生成webservice客户端代码调用一个免费的web服务(如webxml ...