美团HD(3)-加载分类导航数据

 

DJHomeViewController.m

复制代码
/** 设置导航栏左侧内容 */
- (void)setupLeftNavItem {

    // Logo
    UIImageView *logoView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_meituan_logo"]];
    UIBarButtonItem *logoItem = [[UIBarButtonItem alloc] initWithCustomView:logoView];
    
    // 类别
    DJNavItem *categoryView = [DJNavItem item];
    [categoryView addTarget:self action:@selector(onCategoryNavItemDidClick)];
    UIBarButtonItem *categoryItem = [[UIBarButtonItem alloc] initWithCustomView:categoryView];
    self.categoryItem = categoryItem;
    
    // 地区
    DJNavItem *areaView = [DJNavItem item];
    [areaView addTarget:self action:@selector(onAreaNavItemDidClick)];
    UIBarButtonItem *areaItem = [[UIBarButtonItem alloc] initWithCustomView:areaView];
    self.areaItem = areaItem;
    
    // 排序
    DJNavItem *sortView = [DJNavItem item];
    [sortView addTarget:self action:@selector(onSortNavItemDidClick)];
    UIBarButtonItem *sortItem = [[UIBarButtonItem alloc] initWithCustomView:sortView];
    self.sortItem = sortItem;
    
    self.navigationItem.leftBarButtonItems = @[logoItem,categoryItem,areaItem,sortItem];
    
}



#pragma mark - 导航按钮被点击
- (void)onCategoryNavItemDidClick {

    // 创建将要显示的Controller
    DJCategoryViewController *categoryVC = [[DJCategoryViewController alloc] init];
    // 设置控制器View的显示大小
    categoryVC.preferredContentSize = CGSizeMake(300, 360);
    // 设置Modal类型
    categoryVC.modalPresentationStyle = UIModalPresentationPopover;
    // 获取Popover
    UIPopoverPresentationController *categoryPopover = categoryVC.popoverPresentationController;
    // 相对于哪个View来显示
    categoryPopover.sourceView = self.categoryItem.customView;
    // 显示位置
    categoryPopover.sourceRect = self.categoryItem.customView.bounds;
    // 设置popover箭头的显示方向
    categoryPopover.permittedArrowDirections = UIPopoverArrowDirectionAny;
    // 跳转
    [self presentViewController:categoryVC animated:YES completion:nil];
    
}
复制代码

DJNavDropView.m

复制代码
#import "DJNavDropView.h"
#import "DJCategory.h"


@interface DJNavDropView()<UITableViewDataSource,UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *mainTableView;


@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 {

    return self.categoryList.count;

}


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

    static NSString *ID = @"category";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    DJCategory *categoryItem = self.categoryList[indexPath.row];
    
    cell.textLabel.text = categoryItem.name;
    cell.imageView.image = [UIImage imageNamed:categoryItem.icon];
    
    return cell;
}

@end
复制代码

最终效果:

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(305)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示