iOS購物車簡單實現(無動畫)

首先分為三種情況,分別是1.點擊單個商品 2.點擊商店選中該商店的所有商品 3.全選

分別創建按鈕? 單個商品的按鈕的tag值為indexPath.row 商店按鈕為 btn.tag = section + 10000; 全選為btn.tag = -10

//確定購物車有商品


if (shopArr.count == 0)

{

[selfshowAlertWithPoint:2

text:@"無商品"

color:ZLCYAN];

return;

}

ShoppingCarModel *mod = shopArr[indexPath.section];

carOrderListModel *lMod = mod.orderList[indexPath.row];///方便取數據

NSNumber *number =[NSNumbernumberWithInteger:indexPath.section];

NSNumber *number1 =[NSNumbernumberWithInteger:indexPath.row];

?//確定當前點擊按鈕有沒有被選中

__blockBOOL isSelected =NO;

__blockBOOL sectionIsSelected =NO;

//數組升序排列為了解決先存下面的再存上面的 導致根據索引取值的時候會出錯

NSSortDescriptor *sortDes1 = [[NSSortDescriptor alloc] initWithKey:@"a"ascending:YES];

NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithObjects:&sortDes1 count:1];

[_selectedArr sortUsingDescriptors:sortDescriptors];

[_selectedArrenumerateObjectsUsingBlock:id _Nonnull obj, NSUInteger idx1, BOOL * _Nonnull stop

{

//單行和商店按鈕 全選會是另一個值來判斷?

if ([obj[@"a"] isEqualToString:[NSStringstringWithFormat:@"%@",number]])

{

NSArray *arr = obj[@"row"];

[arr enumerateObjectsUsingBlock:^(id? _Nonnull obj1, NSUInteger idx, BOOL * _Nonnull stop) {

if ([obj1[@"b"] isEqualToString:[NSStringstringWithFormat:@"%@",number1]])

{

//進到此處表示這一行剛才操作過

isSelected = YES;/// Variable is not assignable (missing __block type specifier)

}

}];

}

if ([obj[@"a"] isEqualToString:[NSStringstringWithFormat:@"%ld",button.tag - 10000]])

{

//這個區被選過

sectionIsSelected = YES;

}

}];


//當點擊商店按鈕的時候


if (button.tag > 9999)

{

//1.找單元格

if (sectionIsSelected)

{

[_selectedArrenumerateObjectsUsingBlock:^(id? _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)

{

if ([obj[@"a"] isEqualToString:[NSStringstringWithFormat:@"%ld",button.tag - 10000]]) {

//刪掉

[_selectedArrremoveObject:obj];

if (button.tag != - 10)

{

All = NO;

}

[button setImage:[UIImageimageNamed:@"nosele"] forState:UIControlStateNormal];

}

}];

}

if (!sectionIsSelected)

{

NSMutableDictionary *sectionDic = [NSMutableDictionarydictionary];

NSMutableArray *rowArr = [NSMutableArrayarray];

ShoppingCarModel *mod4 = shopArr[button.tag - 10000];

[_selectedArrenumerateObjectsUsingBlock:^(id? _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)

{

if ([obj[@"a"] isEqualToString:[NSStringstringWithFormat:@"%ld",button.tag - 10000]])

{

[_selectedArrremoveObject:obj];

}

}];

for (int b = 0; b < mod4.orderList.count; b ++)

{

NSMutableDictionary *rowDic = [NSMutableDictionarydictionary];

carOrderListModel *mod5 = mod4.orderList[b];

NSString *price = [NSStringstringWithFormat:@"%f",[mod5.marketPricefloatValue] * [mod5.numfloatValue]];

[rowDic setObject:[NSStringstringWithFormat:@"%d",b] forKey:@"b"];

[rowDic setObject:price forKey:@"c"];

[rowDic setObject:mod5.cartIdforKey:@"d"];

[rowArr addObject:rowDic];

}

[sectionDic setObject:[NSStringstringWithFormat:@"%ld",(long)button.tag - 10000] forKey:@"a"];

[sectionDic setObject:rowArr forKey:@"row"];

[_selectedArraddObject:sectionDic];

//記錄當前單元格的索引

[button setImage:[UIImageimageNamed:@"sele"] forState:UIControlStateNormal];

// NSLog(@"數組%@",_selectedArr);

}

[tablereloadData];

}


//當點擊某個商品按鈕的時候


if (button.tag > -1 && button.tag < 9999)

{

//1.找單元格

if (isSelected)

{

NSNumber *number =[NSNumbernumberWithInteger:indexPath.section];

NSNumber *number1 =[NSNumbernumberWithInteger:indexPath.row];

[_selectedArrenumerateObjectsUsingBlock:^(id? _Nonnull obj, NSUInteger idx1, BOOL * _Nonnull stop)

{

if ([obj[@"a"] isEqualToString:[NSStringstringWithFormat:@"%@",number]])

{

NSMutableArray *arr = obj[@"row"];

[arr enumerateObjectsUsingBlock:^(id? _Nonnull obj1, NSUInteger idx, BOOL * _Nonnull stop) {

if ([obj1[@"b"] isEqualToString:[NSStringstringWithFormat:@"%@",number1]])

{

//刪掉

[arr removeObject:obj1];

if (button.tag != - 10)

{

All = NO;

}

}

}];

}

}];

[button setImage:[UIImageimageNamed:@"nosele"] forState:UIControlStateNormal];

[seleBtnsetImage:[UIImageimageNamed:@"nosele"] forState:UIControlStateNormal];

}

if (!isSelected)

{

if (button.tag != -10)

{

NSString *num = [NSStringstringWithFormat:@"%f",[lMod.marketPricefloatValue] * [lMod.numfloatValue]];

NSNumber *number =[NSNumbernumberWithInteger:indexPath.section];

NSNumber *numberRow =[NSNumbernumberWithInteger:indexPath.row];

NSMutableArray *rowArr = [NSMutableArrayarray];

NSMutableDictionary *sectionDic = [NSMutableDictionarydictionary];

NSMutableDictionary *rowDic = [NSMutableDictionarydictionary];

[sectionDic setObject:[NSStringstringWithFormat:@"%@",number] forKey:@"a"];

[rowDic setObject:[NSStringstringWithFormat:@"%@",numberRow] forKey:@"b"];

[rowDic setObject:num forKey:@"c"];

[rowDic setObject:lMod.cartIdforKey:@"d"];

[rowArr addObject:rowDic];

[sectionDic setObject:rowArr forKey:@"row"];

//? ? ? ? ? ? NSLog(@"字典%@",sectionDic);

[_selectedArraddObject:sectionDic];

//數組字典之類的存的都是對象數據類型 >>>如果遇到整數類型的可以考慮轉換成NSNumber

//記錄當前單元格的索引

[button setImage:[UIImageimageNamed:@"sele"] forState:UIControlStateNormal];

}

}

}


//當點擊全選按鈕的時候?


if (button.tag == -10)

{

//遍歷記錄索引的數組? 如果數組里面的索引和當前點擊單元格的indexPath相等

//1.找單元格

if (All)

{

//刪掉

[_selectedArrremoveAllObjects];

[button setImage:[UIImageimageNamed:@"nosele"] forState:UIControlStateNormal];

All = NO;

}

else

{

All = YES;

[_selectedArrremoveAllObjects];

for (int a = 0; a < shopArr.count; a ++)

{

NSMutableDictionary *sectionDic = [NSMutableDictionarydictionary];

NSMutableArray *rowArr = [NSMutableArrayarray];

ShoppingCarModel *mod4 = shopArr[a];

for (int b = 0; b < mod4.orderList.count; b ++)

{

NSMutableDictionary *rowDic = [NSMutableDictionarydictionary];

carOrderListModel *mod5 = mod4.orderList[b];

NSString *price = [NSStringstringWithFormat:@"%f",[mod5.marketPricefloatValue] * [mod5.numfloatValue]];

[rowDic setObject:[NSStringstringWithFormat:@"%d",b] forKey:@"b"];

[rowDic setObject:price forKey:@"c"];

[rowDic setObject:mod5.cartIdforKey:@"d"];

[rowArr addObject:rowDic];

}

[sectionDic setObject:[NSStringstringWithFormat:@"%d",a] forKey:@"a"];

[sectionDic setObject:rowArr forKey:@"row"];

[_selectedArraddObject:sectionDic];

}

//記錄當前單元格的索引

[button setImage:[UIImageimageNamed:@"sele"] forState:UIControlStateNormal];

// NSLog(@"數組%@",_selectedArr);

}

[tablereloadData];

}

?///執行完上面以后就可以結算價格了

priceNum = 0;

count = 0;

NSMutableString *str = [NSMutableStringstring];

[_selectedArrenumerateObjectsUsingBlock:^(id? _Nonnull obj, NSUInteger idx1, BOOL * _Nonnull stop)

{

NSArray *arr = obj[@"row"];

[arr enumerateObjectsUsingBlock:^(id? _Nonnull obj1, NSUInteger idx, BOOL * _Nonnull stop) {

//進到此處表示剛才操作過

priceNum = [obj1[@"c"] floatValue] + priceNum;

count ++;

[str insertString:[NSStringstringWithFormat:@"%@,",obj1[@"d"]] atIndex:0];

}];

}];

oneCardId = [NSStringstringWithFormat:@"%@",str];

// NSLog(@"錢數還有多少$%f",priceNum);

labPrice.text = [NSStringstringWithFormat:@"你將支付:%.2f元",priceNum];

[payBtnsetTitle:[NSStringstringWithFormat:@"結算(%lu)",(unsignedlong)count] forState:UIControlStateNormal];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內容...
    i得深刻方得S閱讀 4,757評論 1 9
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,214評論 30 472
  • 01 就像是生銹了一樣。 待在潮濕的地方太久了。 事實上我很喜歡雨天。 02 每個人都有每個人想要去做的事情。 有...
    沈夏儀閱讀 206評論 0 3
  • BUPT校內網使用網頁登錄的方式認證,不需要安裝額外的客戶端,從而避免了各種意義上的適配問題。但是這個方法也有一個...
    橙子是氣球殺手閱讀 689評論 0 0
  • 課程概要:1、非線性方程組2、數值積分3、常微分方程組 1、非線性方程組 2、數值積分(定積分) 3、常微分方程組
    LuCh1Monster閱讀 6,638評論 0 7