级联菜单(方式一)

1.创建2个子控制器,加到当前控制器

#import "ViewController.h"
#import "CategoryViewController.h"
#import "SubcategoryViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 不要自动去调整UIScrollView的contentInset属性
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    CGFloat width = self.view.frame.size.width * 0.5;
    CGFloat height = self.view.frame.size.height;
    
    // 子类
    SubcategoryViewController *subcatetoryVC = [[SubcategoryViewController alloc] init];
    subcatetoryVC.view.frame = CGRectMake(width, 64, width, height);
    [self addChildViewController:subcatetoryVC];
    [self.view addSubview:subcatetoryVC.view];
    
    // 父类
    CategoryViewController *categoryVC = [[CategoryViewController alloc] init];
    categoryVC.view.frame = CGRectMake(0, 64, width, height);
    categoryVC.delegate = subcatetoryVC; // 设置子类是父类的代理
    [self addChildViewController:categoryVC];
    [self.view addSubview:categoryVC.view];
}

@end
2.父分类控制器

//
//  CategoryViewController.h


#import <UIKit/UIKit.h>

@class CategoryViewController;

@protocol CategoryViewControllerDelegate <NSObject>
@optional
- (void)categoryViewController:(CategoryViewController *)categoryViewController didSelectSubcategories:(NSArray *)subcategories;
@end

@interface CategoryViewController : UITableViewController
/**
 *  代理属性
 */
@property (nonatomic, weak) id<CategoryViewControllerDelegate> delegate;
@end
//
//  CategoryViewController.m


#import "CategoryViewController.h"
#import "CategoryModel.h"

@interface CategoryViewController ()
/**
 *  所有的分类数据
 */
@property(nonatomic,strong)NSArray *categories;
@end

@implementation CategoryViewController

- (NSArray *)categories
{
    if (_categories == nil) {
        //这里加载本地plist文件中的数据,实际应该是从服务器端获取数据
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"categories" ofType:@"plist"]];
        
        NSMutableArray *categoryArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
            [categoryArray addObject:[CategoryModel categoryWithDict:dict]];
        }
        _categories = categoryArray;
        
    }
    return _categories;
}

static NSString *ID = @"category";
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //注册cell
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.categories.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];
    
    // 取出model
    CategoryModel *model = self.categories[indexPath.row];
    
    // 给cell设置数据
    cell.imageView.image = [UIImage imageNamed:model.icon];
    cell.imageView.highlightedImage = [UIImage imageNamed:model.highlighted_icon];
    cell.textLabel.text = model.name;
    cell.textLabel.highlightedTextColor = [UIColor blueColor];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   
    
    //点击了父类的cell 就通知代理(告诉子类)
    if ([self.delegate respondsToSelector:@selector(categoryViewController:didSelectSubcategories:)]) {
        
         CategoryModel *model = self.categories[indexPath.row];
        
        // 代理方法传递子分类数据
        [self.delegate categoryViewController:self didSelectSubcategories:model.subcategories];
    }
}

@end
3.用到的模型

//
//  CategoryModel.h

//  分类模型

#import <Foundation/Foundation.h>

@interface CategoryModel : NSObject
/** 子类别数组 */
@property (nonatomic, strong) NSArray *subcategories;
/** 分类名称 */
@property (nonatomic, strong) NSString *name;
/** 图标 */
@property (nonatomic, strong) NSString *icon;
/** 高亮图标 */
@property (nonatomic, strong) NSString *highlighted_icon;

+ (instancetype)categoryWithDict:(NSDictionary *)dict;

@end
//
//  CategoryModel.m


#import "CategoryModel.h"

@implementation CategoryModel
+ (instancetype)categoryWithDict:(NSDictionary *)dict
{
    CategoryModel *model = [[self alloc] init];
    [model setValuesForKeysWithDictionary:dict];
    
    return model;
}
@end
4.子分类控制器

//
//  SubcategoryViewController.h


#import <UIKit/UIKit.h>
#import "CategoryViewController.h"

@interface SubcategoryViewController : UITableViewController<CategoryViewControllerDelegate>

@end
//
//  SubcategoryViewController.m

#import "SubcategoryViewController.h"

@interface SubcategoryViewController ()
/** 子类别数据 */
@property (nonatomic, strong) NSArray *subcategories;
@end

@implementation SubcategoryViewController

static NSString *ID = @"subcategory";

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 注册cell
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
}

#pragma mark - <CategoryViewControllerDelegate>
 - (void)categoryViewController:(CategoryViewController *)categoryViewController didSelectSubcategories:(NSArray *)subcategories
{
    self.subcategories = subcategories;
    
    // 属性表格数据
    [self.tableView reloadData];
}

#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.subcategories.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID
                                                            forIndexPath:indexPath];
    cell.textLabel.text = self.subcategories[indexPath.row];
    
    return cell;
}


@end
5.用到的plist文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_1</string>
		<key>icon</key>
		<string>icon_category_1</string>
		<key>name</key>
		<string>美食</string>
		<key>subcategories</key>
		<array>
			<string>陕菜/西北菜</string>
			<string>云南菜</string>
			<string>素菜</string>
			<string>台湾菜</string>
			<string>客家菜</string>
			<string>淮扬菜</string>
			<string>赣菜</string>
			<string>海南菜</string>
			<string>豫菜</string>
			<string>广西菜</string>
			<string>贵州菜</string>
			<string>北京菜</string>
			<string>内蒙菜</string>
			<string>江西菜</string>
			<string>山西菜</string>
			<string>茶餐厅</string>
			<string>冀菜</string>
			<string>闽菜</string>
			<string>天津菜</string>
			<string>创意菜</string>
			<string>日韩料理</string>
			<string>小吃快餐</string>
			<string>海鲜</string>
			<string>鲁菜</string>
			<string>湖北菜</string>
			<string>徽菜</string>
			<string>烧烤烤肉</string>
			<string>东南亚菜</string>
			<string>东北菜</string>
			<string>新疆/清真</string>
			<string>江浙菜</string>
			<string>咖啡厅</string>
			<string>青海菜</string>
			<string>火锅</string>
			<string>西餐</string>
			<string>面包甜点</string>
			<string>粤菜</string>
			<string>川菜</string>
			<string>湘菜</string>
			<string>自助餐</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_20</string>
		<key>icon</key>
		<string>icon_category_20</string>
		<key>name</key>
		<string>酒店</string>
		<key>subcategories</key>
		<array>
			<string>经济型酒店</string>
			<string>公寓式酒店</string>
			<string>四星级酒店</string>
			<string>三星级酒店</string>
			<string>五星级酒店</string>
			<string>度假村</string>
			<string>客栈旅舍</string>
			<string>青年旅舍</string>
			<string>农家院</string>
			<string>精品酒店</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_2</string>
		<key>icon</key>
		<string>icon_category_2</string>
		<key>name</key>
		<string>休闲娱乐</string>
		<key>subcategories</key>
		<array>
			<string>运动健身</string>
			<string>酒吧</string>
			<string>私人影院</string>
			<string>KTV</string>
			<string>游乐游艺</string>
			<string>温泉/浴场</string>
			<string>演出/赛事/展览</string>
			<string>公园</string>
			<string>桌游/密室</string>
			<string>DIY手工</string>
			<string>足疗按摩</string>
			<string>景点郊游</string>
			<string>咖啡厅</string>
			<string>茶馆</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_3</string>
		<key>icon</key>
		<string>icon_category_3</string>
		<key>name</key>
		<string>生活服务</string>
		<key>subcategories</key>
		<array>
			<string>体检保健</string>
			<string>培训进修</string>
			<string>快照冲印</string>
			<string>宠物服务</string>
			<string>汽车服务</string>
			<string>家居软装</string>
			<string>基础建材</string>
			<string>洗衣店</string>
			<string>机场</string>
			<string>搬家</string>
			<string>小区/商务楼</string>
			<string>公交车</string>
			<string>加油站</string>
			<string>鲜花</string>
			<string>家政服务</string>
			<string>银行</string>
			<string>装修设计</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_3</string>
		<key>icon</key>
		<string>icon_category_3</string>
		<key>name</key>
		<string>结婚亲子</string>
		<key>subcategories</key>
		<array>
			<string>旅游婚纱照</string>
			<string>婚纱摄影</string>
			<string>成衣定制</string>
			<string>亲子摄影</string>
			<string>亲子游乐</string>
			<string>亲子购物</string>
			<string>幼儿教育</string>
			<string>婚纱礼服</string>
			<string>婚庆公司</string>
			<string>彩妆造型</string>
			<string>司仪主持</string>
			<string>婚车租赁</string>
			<string>婚礼跟拍</string>
			<string>婚戒首饰</string>
			<string>婚礼小商品</string>
			<string>孕产护理</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_22</string>
		<key>icon</key>
		<string>icon_category_22</string>
		<key>name</key>
		<string>丽人</string>
		<key>subcategories</key>
		<array>
			<string>化妆品</string>
			<string>整形</string>
			<string>瘦身纤体</string>
			<string>个性写真</string>
			<string>美容美体</string>
			<string>美甲</string>
			<string>美发</string>
			<string>瑜伽</string>
			<string>舞蹈</string>
		</array>
	</dict>
	<dict>
		<key>highlighted_icon</key>
		<string>icon_category_highlighted_4</string>
		<key>icon</key>
		<string>icon_category_4</string>
		<key>name</key>
		<string>购物</string>
		<key>subcategories</key>
		<array>
			<string>生活家居</string>
			<string>服饰鞋包</string>
			<string>食品饮料</string>
			<string>钟表眼镜</string>
			<string>水果生鲜</string>
			<string>母婴用品</string>
			<string>数码家电</string>
			<string>影音书刊</string>
			<string>个护化妆</string>
			<string>珠宝饰品</string>
		</array>
	</dict>
</array>
</plist>










  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值