美团HD(4)-二级联动效果

DJNavDropView.m

#import "DJNavDropView.h"
#import "DJCategory.h"
#import "DJNavMainCategoryCell.h"
#import "DJNavSubCategoryCell.h"

@interface DJNavDropView()<UITableViewDataSource,UITableViewDelegate>

/** 主分类 */
@property (weak, nonatomic) IBOutlet UITableView *mainTableView;
/** 子分类 */
@property (weak, nonatomic) IBOutlet UITableView *subTableView;
/** 选中的子类别集合 */
@property (nonatomic,strong) NSArray *selectedSubCategories;

@end

@implementation DJNavDropView

+ (instancetype)dropView {

   return[[[NSBundle mainBundle] loadNibNamed:@"DJNavDropView" owner:nil options:nil] lastObject];

}

- (void)setCategoryList:(NSArray *)categoryList {

    _categoryList = categoryList;

    // 刷新数据
    [self.mainTableView reloadData];

}

#pragma mark - TableView 数据源方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (tableView == self.mainTableView) { // 主类别
        return self.categoryList.count;
    } else { // 子类别
        return self.selectedSubCategories.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (tableView == self.mainTableView) { // 主类别

        DJNavMainCategoryCell *cell = [DJNavMainCategoryCell cellWithTableView:tableView];
        // 设置当前Cell属性
        DJCategory *categoryItem = self.categoryList[indexPath.row];
        cell.textLabel.text = categoryItem.name;
        cell.imageView.image = [UIImage imageNamed:categoryItem.icon];
        // 如果当前主类别有子类别
        if (categoryItem.subcategories.count) {
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; // 显示向右的箭头
        } else {
            cell.accessoryType = UITableViewCellAccessoryNone; // 隐藏箭头
        }
        return cell;

    } else { // 子类别

        DJNavSubCategoryCell *cell = [DJNavSubCategoryCell cellWithTableView:tableView];
        // 设置当前Cell属性
        cell.textLabel.text = self.selectedSubCategories[indexPath.row];
        return cell;

    }
}

#pragma mark - TableView 代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if (tableView == self.mainTableView) { // 点击主分类上面的条目
        DJCategory *category = self.categoryList[indexPath.row];
        self.selectedSubCategories = category.subcategories;
        // 刷新子栏目列表数据
        [self.subTableView reloadData];
    } else { // 点击子分类上面的条目

    }

}

@end

DJNavMainCategoryCell.m

#import "DJNavMainCategoryCell.h"

@implementation DJNavMainCategoryCell

+ (instancetype)cellWithTableView:(UITableView *)tableView {

    static NSString *ID = @"main_category";
    DJNavMainCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[DJNavMainCategoryCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    return cell;
}

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

       UIImageView *bg = [[UIImageView alloc] init];
        bg.image = [UIImage imageNamed:@"bg_dropdown_leftpart"];
        self.backgroundView = bg;

        UIImageView *selectedBg = [[UIImageView alloc] init];
        selectedBg.image = [UIImage imageNamed:@"bg_dropdown_left_selected"];
        self.selectedBackgroundView = selectedBg;

    }
    return self;
}

@end

最终效果:

时间: 2025-01-19 23:50:02

美团HD(4)-二级联动效果的相关文章

JavaScript实现Div二级联动效果(响应键盘按钮)

最近在学习javascript,给了一个题目给我,写一个二级联动效果.当做练习. 写一个二级联动的HTML页面,具体要求如下: 1.页面支持通过键盘上的上下左右键实现焦点的移动 2.页面左侧为父栏目名称,如电影.电视剧.体育.音乐.少儿.综艺.咨询等 3.焦点在对应父栏目上时,展示子栏目信息,如电影栏目下有1,2,3,4,5等子栏目: 4.页面数据为静态数据,可以配置修改: 效果: <html> <head> <title>二级联动</title> <

springboot查询数据库,js实现二级联动效果

1.数据库设计 实现oracle,mysql不同数据库链接不同的数据类型 2.在跳转到添加页面的时候,去数据库查询parent_id=0的数据,存入modelMap中带入add.html页面 @GetMapping("/add") public String add(ModelMap mmap) { //查询数据库类型,返回oracle和mysql等数据库 List<DatabaseVo> databaseVo = matedataService.selectDatabas

一个简单的二级联动效果,看完之后立马你也可以写一个(有源码,纯js,带注释)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>选择</title> <meta name="viewport" content="initial-scale=1.0, width=device-width,minimum-scale=1.0,maximum-scale=1

jQuery动态绑定事件(简单模拟二级联动效果)

绑定事件:$("#leyangjun").bind("change",function(){ jquery 给标签赋值:$('#leyangjun').text('好一朵美丽的茉莉花'); 清空表单值:$("#leyangjun").empty(); radio取值:$("input[name='radioName'][checked]").val(); <!DOCTYPE html PUBLIC "-//W3

省市二级联动

先是构建好HTML代码,通过下拉框来实现功能: 通过jQuery来实现代码: 1.先要引入jar包 2.接下里10步完成二级联动效果:主要是定位获取用户选择的省份--------清楚第二个下拉列表中的内容----创建二维数组用于存放省份和城市----遍历二维数组中的省份- ---判断用户选择的省份和遍历的省份----遍历该省份下面所的城市----创建城市文本节点----创建option元素节点-- --将城市节点存放到option节点中去----将option节点追加到第二个下拉列表中去 3.具

js实现菜单二级联动

代码如下,以便自己以后方便查阅: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>菜单二级联动效果</title> <

Asp.Net下,基于Jquery的Ajax二级联动

最近做一个项目,要求实现二级联动效果.背景为:通过学院的选择,联动出专业选项.起初想直接用微软的控件实现Ajax效果,但是DropDownList控件会自动触发PostBack,在后台根本就不好控制,所以抛弃这种方案,用Jquery实现Ajax效果.直接上代码,简单直观. 1.前端页面(这里给出页面二级联动示意,分别为两个select) <select name="xsxy" id="xsxy"> <option>-- 请选择学院名称 --&

基于jQuery+JSON的省市县 二级 三级 联动效果

省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. HTML 首先在head中载入jquery库和cityselect插件. <script type="text/javascript" src="js/jquery.js"></script> <script ty

input 联动效果灵活运用 二级菜单 同类型筛选(电影排名) 纯CSS3

input 联动效果 input舍弃了输入框,感觉好“好玩”! 二级菜单 贴个我以前做的效果图,一般PC端多用鼠标移入:hover出现二级菜单,input通过鼠标点击出现,PC端和移动端(移动端木有鼠标...)都适用 HTML代码如下: 1 <header> 2 <nav> 3 <input type="checkbox" id="area" class="first"> 4 <p>成都</p