IOS开发入门之iOS高仿淘宝购物车,功能模块应有尽有
白羽 2018-11-23 来源 :网络 阅读 1408 评论 0

摘要:本文将带你了解IOS开发入门iOS高仿淘宝购物车,功能模块应有尽有,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门iOS高仿淘宝购物车,功能模块应有尽有,希望本文对大家学IOS有所帮助。


        

刚做完一个淘宝的购物车,按着淘宝做的,换了个产品经理,人家喜欢JD的购物车,一句话,咱换个风格,好心酸有没有,天天刷存在感,只有我们苦逼了,那么既然需求来了,就要按着大爷的要求改了,为了纪念下,咱写个Demo给大家分享下。

我擦,我一看代码,我还是用AutoLayout做的,主界面代码都能快接近800了,全加起来想想有点多啊,这简直是用生命在写Demo啊,该有的效果全有了,各位请看图

 

再来一组

简单分析下功能

1.给UIKit控件增加Badge的扩展(这个扩展需要的去代码里面抠出来)

2.加入购物车的时候凹陷效果(这个效果我单独开了个博客分析的)--->点击打开链接

3.购物车纯AutoLayout实现双层Cell高度自适应(这个有点叼,没用习惯的估计能看瞎)

4.购物车动态计算价格,多选或单选删除,编辑切换Cell,简单富文本等逻辑 (基础逻辑展示)

5.给购物车底部增加相关商品推荐 (主要是给TableFooterView加了CollectionView)

6.一个展示图片的组件 (JTSImageViewController)

7.为了不让看的人无聊, 选了几个妹子

 

 

简单的看下代码

1.进入购物车之前凹陷效果模拟添加购物车


- (void)show:(UITapGestureRecognizer *)tap

{

    if (!self.chooseVC){

        self.chooseVC = [[ChooseGoodsPropertyViewController alloc] init];

    }

    self.chooseVC.enterType = FirstEnterType;

    __weak typeof(self)weakSelf = self;

    self.chooseVC.block = ^{

        NSLog(@"点击回调去购物车");

        // 下面一定要移除,不然你的控制器结构就乱了,基本逻辑层级我们已经写在上面了,这个效果其实是addChildVC来的,最后的展示是在Window上的,一定要移除

        [weakSelf.chooseVC.view removeFromSuperview];

        [weakSelf.chooseVC removeFromParentViewController];

        weakSelf.chooseVC.view = nil;

        weakSelf.chooseVC = nil;

        MKJShoppingCartViewController *shop = [MKJShoppingCartViewController new];

        [weakSelf.navigationController pushViewController:shop animated:YES];

    };

    self.chooseVC.price = 256.0f;

    [self.navigationController presentSemiViewController:self.chooseVC withOptions:@{

                                                                                     KNSemiModalOptionKeys.pushParentBack    : @(YES),

                                                                                     KNSemiModalOptionKeys.animationDuration : @(0.6),

                                                                                     KNSemiModalOptionKeys.shadowOpacity     : @(0.3),

                                                                                     KNSemiModalOptionKeys.backgroundView : [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background_01"]]

                                                                                    }];

}

   

 

这种效果我已经单独写出来了,需要的朋友可以点击打开链接

需要注意到的是他的层级关系,那么如果你像我一样要Push到下个界面的时候,务必把你的控制器和控制器的上View remove掉,最好直接把指针置nil,类似于上面的代码这样操作,不然你的界面就飞了

 

 

2.来看看我吊炸天的AutoLayout布局双层Cell

先看看树形结构

contentView

NormalView(包含了正常状态下的控件)

EditBackView(包含了编辑状态下的控件)

chooseButton

ProductImageView

需要看详细布局的可以去下载Demo,感觉这种自适应的东西有点难讲,我自己都懵逼了

 

这里面有20来个控件,全约束好了,再配合FD一句代码实现高度自适应而且能编辑非编

辑切换,这TM省了几百行代码有木有啊......爽啊

 


   

// 高度计算

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

    BuyerInfo *buyer = self.buyerLists[indexPath.section];

    if (buyer.buyerIsEditing)

    {

        return 100;

    }

    else

    {

        CGFloat actualHeight = [tableView fd_heightForCellWithIdentifier:shoppongID cacheByIndexPath:indexPath configuration:^(ShoppingCartCell *cell) {

             

            [self configCell:cell indexPath:indexPath];

             

        }];

        return actualHeight >= 100 ? actualHeight : 100;

    }

}

   



再设置一套代理,那么这个Cell基本交互就解决了

 


   

@protocol ShoppingCartCellDelegate <nsobject>

// 点击单个商品选择按钮回调

- (void)productSelected:(ShoppingCartCell *)cell isSelected:(BOOL)choosed;

// 点击buyer选择按钮回调

- (void)buyerSelected:(NSInteger)sectionIndex;

// 点击buyer编辑回调按钮

- (void)buyerEditingSelected:(NSInteger)sectionIdx;

// 点击垃圾桶删除

- (void)productGarbageClick:(ShoppingCartCell *)cell;

// 点击编辑规格按钮下拉回调

- (void)clickEditingDetailInfo:(ShoppingCartCell *)cell;

// 商品的增加或者减少回调

- (void)plusOrMinusCount:(ShoppingCartCell *)cell tag:(NSInteger)tag;

// 点击图片回调到主页显示

- (void)clickProductIMG:(ShoppingCartCell *)cell;

@end

 

@interface ShoppingCartCell : UITableViewCell

 

@property (nonatomic,assign) id<shoppingcartcelldelegate>delegate;</shoppingcartcelldelegate></nsobject>

   

 

3.简单介绍下购物车里面的交互功能

这里功能的思路基本是一致的,我们给商品model和buyerModel分别添加BOOL字段来

进行开或者关,然后在加载cell的时候做进一步判断

第一:例如计算总价(只需要更改商品的BOOL字段)

 


#pragma mark - 计算选出商品的总价

- (CGFloat)countTotalPrice

{

    CGFloat totalPrice = 0.0;

    for (BuyerInfo *buyer in self.buyerLists) {

        if (buyer.buyerIsChoosed) {

            for (ProductInfo *product in buyer.prod_list) {

                totalPrice += product.order_price * product.count;

            }

        }else{

            for (ProductInfo *product in buyer.prod_list) {

                if (product.productIsChoosed) {

                    totalPrice += product.order_price * product.count;

                }

            }

        }

    }

    return totalPrice;

}

   

第二:例如多选 删除操作

这里需要注意的是,当删除批量的时候,一定不能再for循环里面一个一个删除,我们需要用一个临时数组抱起来,然后再统一删除,不然会越界崩掉


   

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    // 单个删除

    if (alertView.tag == 101) {

        if (buttonIndex == 1)

        {

            NSIndexPath *indexpath = [self.tableView indexPathForCell:self.tempCellArray.firstObject];

            BuyerInfo *buyer = self.buyerLists[indexpath.section];

            ProductInfo *product = buyer.prod_list[indexpath.row];

            if (buyer.prod_list.count == 1) {

                [self.buyerLists removeObject:buyer];

            }

            else

            {

                [buyer.prod_list removeObject:product];

            }

            // 这里删除之后操作涉及到太多东西了,需要

            [self updateInfomation];

        }

    }

    else if (alertView.tag == 102) // 多个或者单个

    {

        if (buttonIndex == 1)

        {

<    

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程