您的位置:首页 > 其它

级联菜单(方式一)

2016-02-10 11:10 169 查看


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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: