一、数据刷新的原则:

  • 通过修改模型数据,来修改tableView的展示

    • 先修改数据模型
    • 在调用数据刷新方法
  • 不要直接修改cell上面子控件的属性

二、增删改用到的方法:

  <1>重新绑定屏幕上所有的cell,这个方法没有动画效果,但是以下三种方法通过这个方法都可以办到

    // 重新加载数据,刷新的是整个页面,没有动画
[self.tableView reloadData];

  <2>刷新特定的cell,可以设置动画效果

    // 刷新指定的cell
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow: inSection:]] withRowAnimation:UITableViewRowAnimationLeft];

  <3>插入特定行数的cell,可以设置动画效果

     // 只是刷新添加的数据,可以同时设置动画
[self.tableView insertRowsAtIndexPaths:@[
[NSIndexPath indexPathForRow: inSection:],
[NSIndexPath indexPathForRow: inSection:]
] withRowAnimation:UITableViewRowAnimationMiddle];

  <4>删除特定行数的cell,可以设置动画效果

    [self.dealArray removeObjectAtIndex:];
[self.tableView deleteRowsAtIndexPaths:@[
[NSIndexPath indexPathForRow: inSection:]
] withRowAnimation:UITableViewRowAnimationFade];

三、

  <1>左滑动删除效果,需要实现tableView的代理方法。实现该方法后默认实现的是左滑动有删除按钮,但是这个方法会处理两种情况:删除和添加

 #pragma mark - tableView代理方法
// 只要实现了这个方法,左滑cell就会出现删除按钮
// 调用时机:用户提交了添加(点击了添加按钮)\删除(点击了删除按钮)操作时会调用
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleInsert) { // 添加 } else { // 删除 [self.dealArray removeObjectAtIndex:indexPath.row];
// [self.tableView reloadData];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
}

  <2>配合下面这个方法,可以决定编辑的类型,前提是self.tableView.editing = YES;

 // 这个方法决定了编辑模式时,每一行的编辑类型:inset(+按钮) delete(—按钮)  不实现这个方法默认返回的是delete
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return indexPath.row % ? UITableViewCellEditingStyleInsert:UITableViewCellEditingStyleDelete;
}

四、创建弹框控制器iOS8增加的新功能,其中屏幕下方的弹窗中不能添加文本框,否则会报错

 // 创建弹框控制器,弹框有两种,一种是在中间的一种,另一种是从最下面往上展现的一种
// UIAlertControllerStyleAlert(中间的弹窗)
// UIAlertControllerStyleActionSheet(底端的弹窗)
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"请输入团购信息" message:nil preferredStyle:UIAlertControllerStyleAlert]; // 添加按钮 最后的block参数是点击按钮后执行的代码,取消按钮中的block可以不用设置
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
// 在点击确定按钮的block中做相应的操作
[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
// 创建模型
XMGDeal *deal = [[XMGDeal alloc] init];
// 可以通过alert弹窗中的textFields集合属性获得弹窗中对应文本框的值
deal.title = [alert.textFields[] text];
deal.price = [alert.textFields[] text];
[self.deals insertObject:deal atIndex:]; // 刷新数据
[self.tableView reloadData];
}]]; // 添加文本输入框
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
// 设置占位字符,对于用户有一定的提示作用
textField.placeholder = @"请输入团购名字";
}];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"请输入团购价格";
}]; // 将弹窗展现出来动画效果,显示控制器
[self presentViewController:alert animated:YES completion:nil];

    

iOS边练边学--简单的数据操作(增、删、改),左滑动删除和弹窗的更多相关文章

  1. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  2. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  3. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  5. 大数据作业之利用MapRedeuce实现简单的数据操作

    Map/Reduce编程作业 现有student.txt和student_score.txt.将两个文件上传到hdfs上.使用Map/Reduce框架完成下面的题目 student.txt 20160 ...

  6. MySQL 简洁 数据操作 增删改查 记不住的 看这里把

    1.库操作====================== 1.创建 CREATE DATABASE DB2 charset utf8; 2.删除 DROP DATABASE db2; 3.使用(进入) ...

  7. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  8. 【WPF学习笔记】之如何通过后台C#代码添加(增/删/改按钮)实现对SQLServer数据库数据的更改

    首先,需要连接SQLServer数据库的服务器名称server.数据库名database.数据库用户名uid以及密码pwd,如下图: 然后需要以下数据库SQL代码段,还有一个myHelper.cs代码 ...

  9. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

随机推荐

  1. RHEL7 -- 修改主机名

    RHEL7中,有三种定义的主机名: a.静态的(static):“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名 b.瞬态的(transient):“瞬态” ...

  2. 最短路径 - 弗洛伊德(Floyd)算法

    为了能讲明白弗洛伊德(Floyd)算法的主要思想,我们先来看最简单的案例.图7-7-12的左图是一个简单的3个顶点的连通网图. 我们先定义两个二维数组D[3][3]和P[3][3], D代表顶点与顶点 ...

  3. Linux中断 - IRQ Domain介绍

    一.概述 在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断: 1.IRQ number.CPU需要为每一个外设中断编号,我们称之IRQ Number.这个IRQ number ...

  4. 普里姆Prim算法介绍

    普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法. 基本思想 对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T ...

  5. iOS 关于 设计模式 与网友讨论实录

    关于 设计模式 与网友讨论实录 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留 ...

  6. 获取Android运行apk的packagename 和activityname

    自动化测试中经常遇到这个问题,关于这个题目,方法众多,咱的目的是找个比较简单靠谱的: 方法一: 先进入cmd窗口,adb shell 后: cd /data/data ls 可以看到包名了吧,缺点很明 ...

  7. python3 functools partial 用于函数的包装器详解

    一.partial 的作用: partial 用于对一个已有函数进行包装,达到功能的定制的目的. 二.例子: 假设我们要完成两个功能,第一个功能是完成两个数相加,第二个功能是给一个自增一下 1.传统方 ...

  8. JavaScript与DOM(下)

    介绍 上一章我们介绍了JavaScript的基本内容和DOM对象的各个方面,包括如何访问node节点.本章我们将讲解如何通过DOM操作元素并且讨论浏览器事件模型. 本文参考:http://net.tu ...

  9. js实现精确统计网站访问量的代码分享

    JS 精确统计网站访问量. 代码如下: /** * vlstat 浏览器统计脚本 */ var statIdName = "vlstatId"; var xmlHttp; /** ...

  10. linux修改yum本地源的方法

    CentOS 系统下修改yum本地源: mkdir /mnt/cdrom/ cd /etc/yum.repos.d/mv CentOS-Base.repo CentOS-Base.repo.bakvi ...