级联菜单(方式一)
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]; } @end2.父分类控制器
// // 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]; } } @end3.用到的模型
// // 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; } @end4.子分类控制器
// // 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; } @end5.用到的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>
相关文章推荐
- BestCoder Round #71
- js 的其它运算符和优先级
- Photoshop CS6 实例之用快速选择工具扣取美女
- 木马逆名欺骗:利用unicode控制符RLO
- Leetcode - 144. Binary Tree Traversal
- 使用FileZilla等软件搭建ftp服务器
- 编写JAVA代码在生产环境启用临时端口进行telnet网络测试
- cacti安装配置与添加客户端
- 学习韦东山视频之对u-boot的理解
- 格式化输入输出易忘点
- Light OJ 1068 Investigation (数位DP)
- LVS_DR + keepalived配置
- linux的oracle修改实例名SID
- u-boot-2016.01之支持yaffs以及制作补丁
- 程序员修炼之路
- 【SPOJ-DISUBSTR】Distinct Substrings【后缀数组】
- 程序员修炼之路
- 算法训练 操作格子
- LVS-NAT配置
- 快速进入开发