最近做商城项目,购物车我觉得是最麻烦的家伙,记录下实现思路和逻辑
第一个点 选中与不选中的状态处理
我是用model来赋状态,在网络数据model中给一个bool型值,选button的selecte值赋给model的bool值,刷新这个cell达到选中的效果,tableview的机制配合rac可以轻松取到正在操作的cell
//选中与不选中
[[[cell.selectBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:cell.rac_prepareForReuseSignal] subscribeNext:^(id x) {
cell.selectBtn.selected=!cell.selectBtn.selected;
//状态保存在model里
cell.model.btnselelct=cell.selectBtn.selected;
if (cell.selectBtn.selected==YES) {
[self.selectCartIDs addObject:cell.model.cart_id];
if (self.editstate==0) {
[self getTotalNetWorkData];
}else{
[self isallselect];
}
}else{
[self.selectCartIDs removeObject:cell.model.cart_id];
if (self.editstate==0) {
[self getTotalNetWorkData];
}else{
[self isallselect];
}
}
//刷新指定cell
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
}];
第二个点全选按钮
实现思路:遍历购物车数据数组,给每一个model中的按钮状态bool值赋yes或者NO,这样点击全选刷新一下就可以实现全选效果,改变model值时,重新创建一个model,取出来改就可以了,无需任何操作。
//全选Btn
- (void)AllchooseBtnClick
{
self.footer.AllchooseBtn.selected = ! self.footer.AllchooseBtn.selected;
[self.selectCartIDs removeAllObjects];
self.selectCartIDs = [NSMutableArray arrayWithArray:self.allcartIDs];
if (self.footer.AllchooseBtn.selected==YES) {
for (int i=0; i<self.cartlistarry.count; i++) {
TSCartListModel *model = self.cartlistarry[i];
model.btnselelct=YES;
}
} else {
for (int i=0; i<self.cartlistarry.count; i++) {
TSCartListModel *model = self.cartlistarry[i];
model.btnselelct=NO;
}
[self.selectCartIDs removeAllObjects];
}
[self.tableView reloadData];
}
第三个点 编辑商品数量时后台需要上传参数为 json格式字符串
数量的增减也是model赋值,思路和选中状态实现差不多,字典转化为json
#pragma mark - 字典转化为JSON
- (NSString *)convertToJsonData:(NSDictionary *)dict {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
return mutStr;
}