1.tableView的刷新

1> 数据刷新的总体步骤

* 修改模型数据

* 刷新表格(刷新界面)

2> 刷新表格(刷新界面)的方法

* 全局刷新(每一行都会重新刷新)

- (void)reloadData;

* 局部刷新(使用前提: 刷新前后, 模型数据的个数不变)

- (void)reloadRows:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

* 局部删除(使用前提: 模型数据减少的个数 == indexPaths的长度)

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

实例:

  1. #define NJContactsPath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.arc"]
  2.  
  3. @interface NJContatcsViewController ()<UIActionSheetDelegate, NJAddViewControllerDelegate, NJEditViewControllerDelegate>
  4. /**
  5. * 点击注销按钮
  6. */
  7. - (IBAction)logout:(UIBarButtonItem *)sender;
  8.  
  9. /**
  10. * 保存所有用户数据
  11. */
  12. @property (nonatomic, strong) NSMutableArray *contatcs;
  13. @end
  14.  
  15. @implementation NJContatcsViewController
  16. - (void)viewDidLoad
  17. {
  18. [super viewDidLoad];
  19.  
  20. self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  21.  
  22. // 给当前控制器的当行控制器添加一个按钮
  23. UIBarButtonItem *addBtn = self.navigationItem.rightBarButtonItem;
  24. UIBarButtonItem *editBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBtnClick)];
  25.  
  26. self.navigationItem.rightBarButtonItems = @[editBtn, addBtn];
  27. }
  28.  
  29. - (void)editBtnClick
  30. {
  31. // NSLog(@"editBtnClick");
  32. // 开启tableview的编辑模式
  33. // self.tableView.editing = !self.tableView.editing;
  34. [self.tableView setEditing:!self.tableView.editing animated:YES];
  35. }
  36.  
  37. - (IBAction)logout:(UIBarButtonItem *)sender
  38. {
  39. UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定要注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil];
  40. [sheet showInView:self.view];
  41.  
  42. }
  43. #pragma mark - UIActionSheetDelegate
  44. - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
  45. {
  46. if ( != buttonIndex) return;
  47.  
  48. // 移除栈顶控制器
  49. [self.navigationController popViewControllerAnimated:YES];
  50. }
  51.  
  52. // 无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行该方法
  53. // 控制器跳转之前(执行segue之前)执行
  54. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  55. {
  56. // 0.判断目标控制器是添加还是编辑
  57. // 1.取出目标控制器
  58. UIViewController *vc = segue.destinationViewController;
  59. if ([vc isKindOfClass:[NJAddViewController class]]) {
  60. NJAddViewController *addVc = (NJAddViewController *)vc;
  61. // 2.设置代理
  62. addVc.delegate = self;
  63. }else if ([vc isKindOfClass:[NJEditViewController class]]){
  64. // 传递数据
  65. NJEditViewController *editVc = (NJEditViewController *)vc;
  66.  
  67. // 通过tableview获取被点击的行号
  68. NSIndexPath *path = [self.tableView indexPathForSelectedRow];
  69. // 取出被点击行的模型
  70. NJContatc *c = self.contatcs[path.row];
  71. NSLog(@"联系人列表 %p" , c);
  72. // 赋值模型
  73. editVc.contatc = c;
  74. // 设置代理
  75. editVc.delegate = self;
  76. }
  77. }
  78.  
  79. #pragma mark - NJEditViewControllerDelegate
  80. - (void)editViewControllerDidClickSavBtn:(NJEditViewController *)editViewController contatc:(NJContatc *)cpmtatc
  81. {
  82. // 0.更新保存的数据
  83. // NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.arc"];
  84. [NSKeyedArchiver archiveRootObject:self.contatcs toFile:NJContactsPath];
  85.  
  86. // 1.刷新表格
  87. [self.tableView reloadData];
  88. }
  89.  
  90. #pragma mark - NJAddViewControllerDelegate
  91. - (void)addViewControllerDidAddBtn:(NJAddViewController *)editViewController contatc:(NJContatc *)contatc
  92. {
  93. // 1.保存数据到数组中
  94. [self.contatcs addObject:contatc];
  95.  
  96. // 在这个地方保存用户添加的所有的联系人信息
  97. // NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ] stringByAppendingPathComponent:@"contacts.arc"];
  98. [NSKeyedArchiver archiveRootObject:self.contatcs toFile:NJContactsPath];
  99.  
  100. // 2.刷新表格
  101. [self.tableView reloadData];
  102. }
  103.  
  104. #pragma mark - 数据源方法
  105. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  106. {
  107. return self.contatcs.count;
  108. }
  109. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  110. {
  111. // 1.创建cell
  112. NJContatcCell *cell = [NJContatcCell cellWithTableView:tableView];
  113. // 2.设置模型
  114. // 设置数据
  115. NJContatc *c = self.contatcs[indexPath.row];//
  116. cell.contatc = c;
  117. // 2.返回cell
  118. return cell;
  119. }
  120.  
  121. // 只在在tableview的编辑模式下才有添加
  122.  
  123. // 只要实现该方法, 手指在cell上面滑动的时候就自动实现了删除按钮
  124. // commitEditingStyle: 传入提交的编辑操作(删除/添加)
  125. // forRowAtIndexPath: 当前正在编辑的行
  126. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  127. {
  128. // NSLog(@"%d", indexPath.row);
  129.  
  130. if (UITableViewCellEditingStyleDelete == editingStyle) {
  131. // 1.修改数据
  132. [self.contatcs removeObjectAtIndex:indexPath.row];
  133. // 2.刷新表格
  134. // reloadData会重新调用数据的所有方法,刷新所有的行
  135. // [self.tableView reloadData];
  136.  
  137. // 该方法用于删除tableview上指定行的cell
  138. // 注意:使用该方法的时候,模型中删除的数据的条数必须和deleteRowsAtIndexPaths方法中删除的条数一致,否则会报错
  139. // 简而言之,就删除的数据必须和删除的cell保持一致
  140. [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
  141.  
  142. // 3.更新保存的文件
  143. [NSKeyedArchiver archiveRootObject:self.contatcs toFile:NJContactsPath];
  144.  
  145. }else if (UITableViewCellEditingStyleInsert == editingStyle)
  146. {
  147. // 添加一条数据
  148. // NSLog(@"添加一条数据");
  149.  
  150. // 1.修改数据
  151. NJContatc *c = [[NJContatc alloc] init];
  152. c.name = @"xff";
  153. c.phoneNumber = @"";
  154.  
  155. // [self.contatcs addObject:c];
  156. [self.contatcs insertObject:c atIndex:indexPath.row + ];
  157.  
  158. // NJContatc *c1 = [[NJContatc alloc] init];
  159. // c1.name = @"xzz";
  160. // c1.phoneNumber = @"123456";
  161. // [self.contatcs insertObject:c1 atIndex:indexPath.row + 2];
  162.  
  163. // 2.刷新表格
  164. // [self.tableView reloadData];
  165.  
  166. NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row + inSection:];
  167. // 注意点:数组中插入的条数必须和tableview界面上插入的cell条一致
  168. // 否则程序会报错
  169. [self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
  170. }
  171.  
  172. }
  173.  
  174. // 用于告诉系统开启的编辑模式是什么模式
  175. - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  176. {
  177. // NSLog(@"indexPath = %d", indexPath.row);
  178. // return UITableViewCellEditingStyleInsert;
  179.  
  180. if (indexPath.row % == ) {
  181. return UITableViewCellEditingStyleInsert;
  182. }else
  183. {
  184. return UITableViewCellEditingStyleDelete;
  185. }
  186. }
  187.  
  188. #pragma mark - 懒加载
  189. - (NSMutableArray *)contatcs
  190. {
  191. if (_contatcs == nil) {
  192.  
  193. // 1.获取路径
  194. // NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.arc"];
  195. // 2.从文件中读取数组
  196. _contatcs = [NSKeyedUnarchiver unarchiveObjectWithFile:NJContactsPath];
  197.  
  198. // 3.如果第一次启动没有文件,就创建一个空的数组用于保存数据
  199. if (_contatcs == nil) {
  200. _contatcs = [NSMutableArray array];
  201. }
  202.  
  203. }
  204. return _contatcs;
  205. }

IOS tableView的数据刷新的更多相关文章

  1. IOS tableview下拉刷新上拉加载分页

    http://code4app.com/ios/快速集成下拉上拉刷新/52326ce26803fabc46000000 刷新没用用插件,加载使用的MJ老师的插件. - (void)viewDidLoa ...

  2. IOS开发UI基础--数据刷新

    IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...

  3. 李洪强iOS开发之 - 指定刷新tableview的某一组

    李洪强iOS开发之 - 指定刷新tableview的某一组

  4. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  5. IOS 开发下拉刷新和上拉加载更多

    IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...

  6. 【转】iOS开发系列--数据存取

    原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...

  7. JAVAFX之tableview界面实时刷新导致的内存溢出(自己挖的坑,爬着也要出来啊0.0)

    这几天遇到了一个问题,不幸开发的一个cs架构的工具,客户端开启后,内存一直在缓慢增长最终导致进程卡死,花了4天时间,终于爬出来了... 客户端通过timer定时器每30秒查询一次数据库以及一些业务逻辑 ...

  8. iOS TableView多级列表

    代码地址如下:http://www.demodashi.com/demo/15006.html 效果预览 ### 一.需求 TableView多级列表:分级展开或合并,逐级获取并展示其子级数据,可以设 ...

  9. iOS-UI控件之UITableView(四)- cell数据刷新

    TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 ...

随机推荐

  1. GXU - 7D - 区间求和 - 前缀和

    https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一个所有元素皆为0的数组A,有两种操作: 1 l r x表示将A区间[l,r]内所有数加上x: 2 l r表 ...

  2. 远程控制Ubuntu系统小结

    一.在远程控制的Ubuntu上,按shift键总会出现中文字符 因为在Ubuntu中,默认启动搜狗输入法,导致在按shift键时,不停出现中文字符 一开始以为是因为远程控制,在主控机和被控机的输入法之 ...

  3. Unix Tutorial Eight

    1.UNIX 变量 变量是在运行时将信息从shell传递到程序的一种方式.程序在特定的变量中查找“在环境中”,如果发现它们将使用存储的值.有些是由系统设置的,另一些是由你设置的,还有一些是由shell ...

  4. hdu6069(简单数学+区间素数筛法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 给出 l, r, k.求:(lambda d(i^k))mod998244353,其中 ...

  5. 洛谷P1024 一元三次方程求解

    P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...

  6. Pipenv: Python包管理神器

    Pipenv旨在将最好的包管理机制(bundler, composer, npm, cargo, yarn等等)带到Python中去. 它会为你的项目自动创建和管理virtualenv,也会在安装和移 ...

  7. MySQL的复制:MySQL系列之十三

    一.MySQL复制相关概念 主从复制:主节点将数据同步到多个从节点 级联复制:主节点将数据同步到一个从节点,其他的从节点在向从节点复制数据 同步复制:将数据从主节点全部同步到从节点时才返回给用户的复制 ...

  8. C#基础之类型和成员基础以及常量、字段、属性

    首先吐糟一下今天杭州的天气,真是太热了!虽然没有妹子跟我约会,但宅在方寸大的窝里,也是烦躁不已! 接上一篇<C#基础之基本类型> 类型和成员基础 在C#中,一个类型内部可以定义多种成员:常 ...

  9. Windows沾滞键设置

    控制面板----轻松使用-----轻松使用设置中心------更改键盘的工作方式

  10. RabbitMQ使用教程(三)如何保证消息99.99%被发送成功?

    1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 在以上两篇博客发布后 ...