在实现这个功能的时候,逻辑是这样的:
有两个数组,一个是所有条目的数组,一个是选中条目的数组
首先,在点按任何按钮的时候,将计算总额与页面的显示(按钮选中状态与总金额的显示)分开;

其次,点击“全选”按钮只管全选按钮的状态,不用管每个条目的状态。全选中时,将所有的条目添加到选中的数组中,再次点击取消全选,然后将选中数组清空。每个条目的状态显示放到刷新tableView里面,判断当前条目的内容有没有再选中的数组中,然后显示每个条目的状态;

然后,点击每个每个cell上的选中按钮的时候,给cell添加代理,点击时修改当前cell 的状态显示,在controller里面调用cell 的代理方法,将cell对应的内容和选中状态传过来,选中,则添加到选中数组中,取消,则从选中数组移除,同时判断选中数组的条目个数是否与所有条目数组的个数是否相同,从而修改全选按钮的状态显示

最后 ,就是总额的显示问题。在每次点击任何一个按钮的时候,都调用总额计算与显示的方法,在这个方法中,循环获取选中数组中的每个条目的价格,然后累加。

代码:

controller 中

@property (nonatomic, assign) BOOL selectAll;全选状态#pragma HadExpireBillCellDelegate (cell 的代理实现)
- (void)selectChange:(BOOL)isSelect bill:(NSDictionary *)bill{NSMutableSet *selectSet = [NSMutableSet setWithArray:_selectBillArr];if (!isSelect) {if ([selectSet containsObject:bill]) {[_selectBillArr removeObject:bill];}}else{if (![selectSet containsObject:bill]) {[_selectBillArr addObject:bill];}}//是否为全选if (_selectBillArr.count == _billArr.count) {self.selectAll = YES;}else{self.selectAll = NO;}[self getAmount];
}#pragma actions
//全选(按钮点击方法)
- (IBAction)selectAllBtnAction:(UIButton *)sender {self.selectAll = !_selectAll ? YES : NO;[self.tableView reloadData];
}
//selectAll 的set 方法(每次赋值便会调用)
- (void)setSelectAll:(BOOL)selectAll{_selectAll = selectAll;if (_selectAll) {[_selectAllBtn setImage:[UIImage imageNamed:@"billSelect"] forState:(UIControlStateNormal)];[self.selectBillArr addObjectsFromArray:_billArr];}else{[_selectAllBtn setImage:[UIImage imageNamed:@"billNoSelect"] forState:(UIControlStateNormal)];[_selectBillArr removeAllObjects];}[self getAmount];
}//计算总金额
- (void)getAmount{float amount = 0;if (_selectBillArr.count == 0) {_allMoneyL.text = @"0.00元";}else{for (NSDictionary *info in _selectBillArr) {float price = [info[@"total"] floatValue];amount += price;}_allMoneyL.text = [NSString stringWithFormat:@"%.2f元",amount];}
}/刷新cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{HadExpireBillCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([HadExpireBillCell class])];cell.infoDic = _billArr[indexPath.row];NSMutableSet *selectSet = [NSMutableSet setWithArray:_selectBillArr];if ([selectSet containsObject:_billArr[indexPath.row]]) {cell.isSelected = YES;}else{cell.isSelected = NO;}cell.delegate = self;return cell;
}

cell中

@protocol HadExpireBillCellDelegate- (void)selectChange:(BOOL)isSelect bill:(NSDictionary *)bill;@end@interface HadExpireBillCell : UITableViewCell@property (nonatomic, strong) NSDictionary *infoDic;@property (nonatomic, assign) BOOL isSelected;@property (nonatomic, assign) id<HadExpireBillCellDelegate> delegate;@end@implementation HadExpireBillCell- (void)setInfoDic:(NSDictionary *)infoDic{_infoDic = infoDic;
}- (void)setIsSelected:(BOOL)isSelected{_isSelected = isSelected;if (isSelected) {[_selectBtn setImage:[UIImage imageNamed:@"billSelect"] forState:(UIControlStateNormal)];}else{[_selectBtn setImage:[UIImage imageNamed:@"billNoSelect"] forState:(UIControlStateNormal)];}
}#pragma actions
- (IBAction)selectBtnAction:(UIButton *)sender {_isSelected = !_isSelected ? YES : NO;if (_isSelected) {[_selectBtn setImage:[UIImage imageNamed:@"billSelect"] forState:(UIControlStateNormal)];}else{[_selectBtn setImage:[UIImage imageNamed:@"billNoSelect"] forState:(UIControlStateNormal)];}[self.delegate selectChange:_isSelected bill:_infoDic];
}
@end

购车的选中功能 iOS相关推荐

  1. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  2. Cordova Android 禁用长按选中功能

    使用Cordova开发程序时,WebView的选择和菜单功能会影响程序的体验,甚至会泄漏程序的信息(可以参看url地址信息等),所有我们需要禁用长按选中功能. 网络上提供通过css样式禁用在Andro ...

  3. 仿 微信/QQ 实现小程序功能 -IOS

    仿 微信/QQ 实现小程序功能 -IOS 1. 需求 首先,来大致看一下 微信/QQ 小程序的功能. Android端: 点击图标进入小程序,会新开一个任务栈,每个小程序一个任务栈(有的机型所有小程序 ...

  4. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  5. android中隐藏的功能,iOS与Android的奥秘:那些你未必了解的隐藏功能

    [51CTO译文]也许大家自认为已经堪称高科技领域的老鸟用户,透彻了解关于iOS与Android系统的一切小秘密--但实际情况恐怕并非如此:总会有一些在说明文档中未有提及(或者未有明确提及)的命令.控 ...

  6. Flutter 混合开发 - 03 百度地图定位功能 ios 篇

    本节目标 创建 ios flutter 插件流程 集成百度定位功能 视频 https://www.bilibili.com/video/BV1HT4y1L73i/ 代码 https://github. ...

  7. iphone无android功能,iPhone 20来了也没用!这些功能iOS永远不会有

    新一代iPhone终于来了!在很多果粉的眼中,每一代iPhone的发布都意味着苹果再一次改变世界.当然,实际上并没有如此夸张,但不可否认的是新的iPhone和iOS都会带来诸多引领业界的新功能.不过, ...

  8. Echarts自定义折线图例,增加选中功能

    用Echarts图表开发,原本的Echarts图例不一定能满足我们的视觉要求. 下面是Echarts 折线图自定义图例,图例checked选中,相应的折线线条会随之checked,其余未选中的图例对应 ...

  9. 汇率换算自然语言理解功能IOS DEMO

    前言 目前使用语音输入越来越普遍.语音输入不仅高效,而且更加自然,符合人类的输入方式.在这里开发了一个汇率换算的 APP,展示了如何使用语音输入和语音识别. APP简介 这个 APP可以识别用户的输入 ...

最新文章

  1. CentOS装LAMP服务器(Apache2+PHP5+MySQL)
  2. C# 操作 Database(Access SQL)
  3. matlab vision工具箱使用手册,matlab-Computer Vision System ToolBox的系统对象使用
  4. select里加链接
  5. php word excel,PHP 生成word 和 excel 文档
  6. Lync Server外部访问系列PART5:模拟公网DNS
  7. Python~win32com~Excel
  8. 最热开源静态网站生成器 TOP 20
  9. thinkphp 框架自动加载原理_这下你应该理解ThinkPHP的Loader自动加载了
  10. 红橙Darren视频笔记setContentView源码分析 xml加载的过程
  11. python深度学习第三讲——用python写神经网络梯度下降(手写字符识别mnist)
  12. python实现目录中制定内容查找
  13. 腾讯回应“二选一”;微信内测更新;特斯拉车祸再致命 | CSDN极客头条
  14. c 提示错误expected) before ; token_NLP.TM[33] | 纠错:pycorrector的错误检测
  15. 教你如何在 Pycharm 中制作自己的爬虫代码模板
  16. python--图像分割GraphCut
  17. 手机扫描识别车牌,车牌识别
  18. php 怎么把数组按拼音,php实现数组按拼音顺序排序的方法
  19. 【算法】基于AOE网的关键路径算法
  20. Firefox 无法播放视频

热门文章

  1. 利用Python数据分析:数据规整化(五)
  2. tina -飞机大战4.0
  3. ArcGIS教程:了解叠加分析
  4. 计算机找不到wlan,Win10网络设置找不到wlan选项怎么办?
  5. Spring Boot getBean()
  6. Velocity ユーザガイド
  7. 浏览器本地mysql_浏览器访问本地数据库
  8. 哈希冲突的产生与解决
  9. Golang系列之布尔类型基本介绍
  10. Linux中执行sh文件时提示:nohup: 无法运行命令“./startup.sh“: 权限不够