(iOS)商城商品属性选择-两种实现思路

作者: RocketsChen | 来源:发表于2017-07-04 20:59 被阅读4632次

    商品选择属性,大部分商城类APP应该都有涉及,今天在这里主要给大家介绍两种实现思路,推荐使用第二种

    • 第一种是用自定义View
    • 第二种是用UICollectionView

    先来个GIF再听我慢慢分析两种方式的实现思路,注意看打印

    属性选择点击打印
    • 自定义View

    没记错第一次开始做企业级项目负责的就是商城模块,当时这个属性选择着实让我很头疼,想着实在不行那就自定义吧😂,毕竟需求开发先弄出个东西再说! 6666

    第一步我自定义了一个 #import "DCShopItemView.h" 并创建其代理方法 ShopItemViewDelegate 自定义初始化alloc的同时传入数组,文字,标题,颜色,字体大小等等一系列属性,并在自定义View里面根据传进来的数组for混循环按钮,代理点击事件。。。。一系列的初始化结束后,在主界面for循环创建DCShopItemView是的没错,后来我发现整个自定义下来,就是for循环,for循环。。。。
    毕竟有更好的实现思路,在这里就简单介绍下,并附上部分代码
    NSArray *array = @[_array01,_array02,_array03,_array04,_array05];
    for (NSInteger j = 0; j < _shopAttr.count; j++) {//两层循环
    for (NSInteger i = 0; i < _shopAttr[j].list.count; i++) {
    NSString *tagName = _shopAttr[j].list[i].infoname;
    [array[j] addObject:tagName];
    }
    }
    这段代码贴出了,眼尖的人就会发现,数组是我事先声明好的,而不是根据服务器返回数据决定的。是的没错,这也是我不太建议使用自定义View去实现的其中一个原因。

        #pragma mark - AttributeViewDelegate
        -(void)ShopItem_View:(DCShopItemView *)view didClickBtn:(UIButton *)btn{
            NSString *title = btn.titleLabel.text;
            if ([view isEqual:self.attributeViewAtt01]) {
                str01_ = title;
            }else if ([view isEqual:self.attributeViewAtt02]){
                str02_ = title;
            }else if ([view isEqual:self.attributeViewAtt03]){
                str03_ = title;
            }else if ([view isEqual:self.attributeViewAtt04]){
                str04_ = title;
            }else if ([view isEqual:self.attributeViewAtt05]){
                str05_ = title;
            }
        }
           for (NSString *str in array) {
           [seleArray addObject:str];
        }
          NSLog(@"自定义View选择的属性:%@",seleArray);
    
    毕竟不是最优解,那就一笔带过吧
    重点来了
    • UICollectionView

    1.这里我们先从模型着手去分析:我认为先对模型进行处理,二维数组,模型外加一个属性,是否选择(isSelect),点击item处理每组的模型是否选择,最后取每组模型被选中模型的加入到另一个数组中,而不是操作点击一下加入数组,那样逻辑太乱不易处理
    /** 是否点击选中 */
    @property (nonatomic,assign)BOOL isSelect;
    我们自定义一个UICollectionViewLayout,因为设计到一个Item的排布问题,这里我就不详细讲解,之前逛Git看见一个整理的方法比较详细的Layout,简单的改动后就拿过来用了非常感谢,言归正传对UICollectionViewLayout初始化完成之后,接下来就是监听处理商品每组,每个Item的点击
    2.在UICollectionViewDelegate代理方法didSelectItemAtIndexPath,我对数据进行了两次for循环,是的又来了for循环!
    第一次:两层for循环,目的是对每组中每个选中的Item进行数据存储
    第二次:为了限制每组内的Item只能选中一个
    代码如下

        #pragma mark - <UICollectionViewDelegate>
        - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
        {
            _shopAttr[indexPath.section].list[indexPath.row].isSelect = !_shopAttr[indexPath.section].list[indexPath.row].isSelect;
            
            //section,item 循环讲选中的所有Item加入数组中 ,数组mutableCopy初始化
            _seleArray = [@[] mutableCopy];
            for (NSInteger i = 0; i < _shopAttr.count; i++) {
                for (NSInteger j = 0; j < _shopAttr[i].list.count; j++) {
                    if (_shopAttr[i].list[j].isSelect == YES) {
                        [_seleArray addObject:_shopAttr[i].list[j].infoname];
                    }
                }
            }
            
            //限制每组内的Item只能选中一个
            for (NSInteger j = 0; j < _shopAttr[indexPath.section].list.count; j++) {
                _shopAttr[indexPath.section].list[j].isSelect = NO;
            }
            _shopAttr[indexPath.section].list[indexPath.row].isSelect = YES;
            [collectionView reloadData];
        }
    
        #pragma mark - 确定点击事件
        - (void)sureClick
        {
            NSLog(@"CollectionView选择的属性:%@",_seleArray);
        }
    

    这样用UICollectionView就实现了商品的属性选择,简单而又粗暴!

    总结一下

    • 让我选肯定诗选第二种实现思路,第一种就当是当做了解吧。
    • Demo代码我就不上传了,如需源码,请留言或私聊我看见都会发的。
    • 我的git上商城在线🙂上面最近会把商品属性选择功能更新上去,到时候去下载也是一样的。

    相关文章

      网友评论

      • 123_b194:我想要这份实现源码参考一下,谢谢。求源码 1942068157@qq.com
      • 井底蛙之呱呱:991844025QQ加下私聊
      • 井底蛙之呱呱:大哥,你这个属性有问题呢
        RocketsChen:@Besic1024 我的github开源最新源码,上面有完整实现
      • 高乔人:大哥,有问题,没看出来吗
      • efe26f4cced5:求个demo 啊,a729207032@qq.com
      • 路有点颠簸:还是一个一个的看比较容易懂、谢谢大佬、657400689@qq.com
        路有点颠簸:@RocketsChen 我早已感动得泪流满面:+1:
        RocketsChen:@路有点颠簸 已发
      • 77Timor:我想要这份实现源码,更直观。求源码940927264@qq.com
      • PGOne爱吃饺子:大哥 我需要源码 ,我想看一下你的思路
        RocketsChen:@4140d18ee6fc 我找下找到私发你,当初着重想说明的是思路所以没给demo地址
        PGOne爱吃饺子:@RocketsChen 我下载了一个你最想的app,不过我想要的是关于这一个问题的demo
        RocketsChen:@4140d18ee6fc 我最新的git已经把这方面更完善思路更新了,你可以去下载
      • PGOne爱吃饺子:楼主 这个问题提的这么好,为啥没有一个demo啊 :sob:

      本文标题:(iOS)商城商品属性选择-两种实现思路

      本文链接:https://www.haomeiwen.com/subject/ysixhxtx.html