美文网首页
单选/多选投票的逻辑实现

单选/多选投票的逻辑实现

作者: Jerry_Lee | 来源:发表于2016-10-14 17:38 被阅读220次
    • 最近需要做一个统一的单选、多选组件,需要做一些逻辑判断。
    • 由于某些原因,不能测试逻辑的实现代码。因此写了流程图并写完逻辑之后写下了详细的注释,方便可以测试的时候可以迅速定位问题。
    • 今天测试了一下,逻辑正确,因此将流程图和逻辑代码贴上来。

    流程图

    单选:多选逻辑.png

    逻辑代码

      // 找到被点击按钮的序号
        NSInteger buttonIndex = -1;
        for (NSInteger i=0; i<[_showButtons count]; i++) {
            UIButton *showButton = [_showButtons objectAtIndex:i];
            if (showButton == sender) {
                buttonIndex = i;
                break;
            }
        }
        if (!_indexs) {
            _indexs = [NSMutableArray array];
        }
        
        if (sender.selected) { // 已点击过该选项
            if (_multi) { // 多选,取消选中
                sender.selected = NO;
                if (buttonIndex != -1) {
                    [_indexs removeObject:@(buttonIndex)];
                }
            }
        } else { // 未点击过该选项
            if (_multi) { // 多选
                if (_multiMax == [_indexs count]) { // 达到选择上限
                // TODO: - 无反应 或者提示达到选择上限
                } else { // 未达到选择上限,选中该选项
                    sender.selected = YES;
                    if (buttonIndex != -1) {
                        [_indexs addObject:@(buttonIndex)];
                    }
                }
            } else { // 单选
                if ([_indexs count] == 0) { // 未点击过其他选项
                    sender.selected = YES;
                    if (buttonIndex != -1) {
                        [_indexs addObject:@(buttonIndex)];
                    }
                } else { // 点击过其他选项,取消其他选项,选中该选项
                    for (UIButton *showButton in _showButtons) {
                        showButton.selected = NO;
                    }
                    [_indexs removeAllObjects];
                    
                    sender.selected = YES;
                    if (buttonIndex != -1) {
                        [_indexs addObject:@(buttonIndex)];
                    }
                }
            }
        }
    
    

    代码中一些字段的解释

    • _multi 是一个bool值,用于判断是否为多选,YES为多选。
    • _multiMax 是一个NSInteger,为多选的允许选择的上限。比如说有8个选项,最多可选4个,那么_multiMax为4。

    相关文章

      网友评论

          本文标题:单选/多选投票的逻辑实现

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