最近做商城項目,購物車我覺得是最麻煩的家伙,記錄下實現(xiàn)思路和邏輯
第一個點 選中與不選中的狀態(tài)處理
我是用model來賦狀態(tài)骑祟,在網(wǎng)絡(luò)數(shù)據(jù)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;
//狀態(tài)保存在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];
}];
第二個點全選按鈕
實現(xiàn)思路:遍歷購物車數(shù)據(jù)數(shù)組怯晕,給每一個model中的按鈕狀態(tài)bool值賦yes或者NO,這樣點擊全選刷新一下就可以實現(xiàn)全選效果缸棵,改變model值時舟茶,重新創(chuàng)建一個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];
}
第三個點 編輯商品數(shù)量時后臺需要上傳參數(shù)為 json格式字符串
數(shù)量的增減也是model賦值隧出,思路和選中狀態(tài)實現(xiàn)差不多,字典轉(zhuǎn)化為json
#pragma mark - 字典轉(zhuǎn)化為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;
}