博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS tableView 下拉列表的设计
阅读量:6525 次
发布时间:2019-06-24

本文共 2253 字,大约阅读时间需要 7 分钟。

hot3.png

参考了SKSTableView的设计思想,工程在github上,我因为没有链接就不贴了

想要做成下边的效果

113058_xhpw_2476972.gif

有两种思路

思路1是用tableView的head作为一级菜单,其他都是每一个section的所有cell,这种方法看起来很好数据是数据,标题是标题

思路二是用TableView的每一个section的row 0 做标题,其余的是数据,这种方法更为简单点,但是逻辑处理将会复杂一些

思路一经过一番实验后发现,问题主要表现在如何让headView响应点击事件,于是将tableview的headview添加一个button,然后让点击时候设置当前的section的行数为0;进而达到所需要的效果

重点介绍一下思路二,并贴上一些代码,因为思路二可以在没有二级菜单的时候可以方便的响应cell点击事件

设置了一个显示隐藏的状态变量_open和记录最后一次点击section的变量_lastOpen

BOOL _open;

NSInteger _lastOpen;

_datasouth = [[NSMutableArray alloc] initWithArray:@[@[@"miao", @"miao1",@"miao12"],

                   @[@"nong", @"nong1", @"nong12", @"Rnong13", @"nong14", @"nong15", @"nong16", @"Rnong17"],
                   @[@"fei", @"fei1",@"fei1"],
                   @[@"lei"],
                   @[@"wu"]]];

设置代理

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return _datasouth.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_open == 0) {
        return 1;
    }
    if (_lastOpen == section) {
        NSArray * arr = _datasouth[section];
        return arr.count;
    }
    return 1;
}

对cell自定义

 if (indexPath.row == 0) {

//组名cell

        if ([_datasouth[indexPath.section] count] == 1) {

            //无分组的cell自定义

            //等同于底层cell,执行跳转?

        }

    } else {
        //底层cell,执行跳转?
    }

选中的方法的逻辑

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == 0 && [_datasouth[indexPath.section] count] == 1) {
        //跳转;
        return;
    }
    if (_open == 0) {
        if (indexPath.row == 0) {
            _open = 1;
            _lastOpen = indexPath.section;
        }
    } else {
        if (indexPath.row == 0) {
            if (_lastOpen == indexPath.section) {
                _open = 0;
                _lastOpen = -1;
            }
            _lastOpen = indexPath.section;
        }
    }
    [_tableView reloadData];
    //[_tableView reloadSections:[NSIndexSet indexSetWithIndex:_lastOpen] withRowAnimation:UITableViewRowAnimationAutomatic];
    if (indexPath.row != 0) {
       //跳转
    }
}

其他的头尾视图设置(可不设置)

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

    if (indexPath.row == 0) {
        return 40;
    };
    return 70;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return .01;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 5)];
    return view;
}

转载于:https://my.oschina.net/bieshixuan/blog/634327

你可能感兴趣的文章
mrtg 参数设置
查看>>
eclipse使用http://localhost:8080/出现404错误
查看>>
服务器select模型
查看>>
安装zabbix
查看>>
霍金去世前,曾向China发出严正警告!!!原因是...
查看>>
Golang亿级高并发实例(代码可直接使用)
查看>>
Linux的shell编程前奏常见命令实战三
查看>>
R730安装ESXI报错Initial menu has no LABEL entries boot
查看>>
第十一周作业
查看>>
iPhone更新失败后如何恢复数据
查看>>
Python发送邮件脚本
查看>>
【蜕变之路】第8天 值传递 (2019年2月26号)
查看>>
爱创课堂每日一题八十八天- display:none与visibility:hid
查看>>
组管理命令
查看>>
配置浮动路由,实现链路冗余
查看>>
批处理Xcopy----复制文件和目录
查看>>
H3C交换机如何配置SNMP协议?
查看>>
自动化运维工具--Ansible(安装部署、模块简介与操作)
查看>>
python获取指定日期的前N天日期和后N天日期
查看>>
史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!
查看>>