可以自定义子节点的多级菜单

1. 多级菜单

2. 多选/单选

3. 三种Cell样式<Base 基础、Default 默认、Custom 自定义>

image

Github XQMultistageTableView 地址

CocoaPods

pod 'XQMultistageTableView', '~> 1.0.6'

XQMultistage 提供三种Cell样式

1、Base 基础

使用 XQMultistageAdapter 管理适配器

- (void)viewDidLoad {
    [super viewDidLoad];

    _adapter = [[XQMultistageAdapter alloc] init];
    _adapter.radio = YES;
    _adapter.delegate = self;
    _adapter.multistageData = self.data;
    UITableView * tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.dataSource = _adapter;
    tableView.delegate = _adapter;
    [self.view addSubview:tableView];
}

2、Default 默认

使用 XQMultistageAdapter 管理适配器

- (void)viewDidLoad {
    [super viewDidLoad];
    _adapter = [[XQMultistageDefaultAdapter alloc] init];
    _adapter.delegate = self;
    _adapter.multistageData = self.data;
    UITableView * tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.dataSource = _adapter;
    tableView.delegate = _adapter;
    [self.view addSubview:tableView]; 
}

3、Custom 自定义 ~随心所欲 ~

使用 XQMultistageAdapter 管理适配器

- (void)viewDidLoad {
    [super viewDidLoad];

    _adapter = [[XQMultistageAdapter alloc] init];
    _adapter.radio = YES;
    _adapter.delegate = self;
    _adapter.multistageData = self.data;
    UITableView * tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.dataSource = _adapter;
    tableView.delegate = _adapter;
    [self.view addSubview:tableView];
}

通过 XQNode 设置对应的节点

typedef enum{  
    XQNodeContentTypeSuper, // 父节点 
    XQNodeContentTypeSub,  // 子节点  
}XQNodeContentType;  
  
@interface XQNode : NSObject  
  
#pragma 共同拥有  
/// 节点名称  
@property(nonatomic, copy) NSString *title;  
  
/// 父节点的id,如果为-1表示该节点为根节点  
@property (nonatomic , retain) NSNumber *parentId;  
  
/// 本节点的id  
@property (nonatomic , retain) NSNumber *nodeId;  
  
/// 该节点的深度  
@property (nonatomic , assign) int depth;  
  
/// 使用者id  
@property (nonatomic , retain) NSNumber *userId;  
  
/// 内容类型  
@property (nonatomic , assign) XQNodeContentType contentType;  
  
/// 图片路径  
@property (nonatomic , copy) NSString *imagePath;  
  
#pragma Super  
/// 子节点列表  
@property (nonatomic, strong) NSMutableArray *subItems;  
  
/// 该节点是否处于展开状态  
@property (nonatomic , assign) BOOL isExpand;  
  
@end  

pragma mark – XQMultistageCellDelegate

/*
 * 自定义Cell
 */
- (XQMultistageCell *)xq_multistageAdapter:(XQMultistageAdapter *)adapter tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * ID = @"QMultistage";

    CustomTypeViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    if (!cell) {
        cell = [[CustomTypeViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }

    return cell;
}

使用 CustomTypeViewCell 配置页面

/**
 * 可以重写 setting 方法,对Cell进行改造
 * 也可继承 XQMultistageNode, 在使用时在转换回自的 model
 */
@implementation CustomTypeViewCell

-(void)setNode:(XQMultistageNode *)node
{
    [super setNode:node];
    
    // 此处.....
}

XQMultistageAdapterDelegate

// 是否关闭子节点 默认是 NO
- (BOOL)xq_multistageAdapterShouldCloseSubNode:(XQMultistageAdapter *) adapter;

// 父节点可不可以点击 默认是 NO
- (BOOL)xq_multistageAdapterUnClickSuperNode:(XQMultistageAdapter *) adapter;

// cell 点击事件
- (void)xq_multistageAdapter:(XQMultistageAdapter *) adapter didSelectRowAtNode:(XQMultistageNode *) node;

// 选择展示功能 -> 状态改变
- (void)xq_multistageAdapter:(XQMultistageAdapter *) adapter didSelectStateChangeAtNode:(XQMultistageNode *) node selectState:(BOOL) state;

// 行高
- (CGFloat)xq_multistageAdapter:(XQMultistageAdapter *) adapter heightForRowAtNode:(XQMultistageNode *) node;

// 自定义 cell
- (XQMultistageCell *)xq_multistageAdapter:(XQMultistageAdapter *) adapter tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

XQMultistageDefaultAdapterDelegate

// 自定义内容左边内边距
// 可通过 XQMultistageNode -> depth 获取到当前层级决定缩紧长度
- (CGFloat)xq_multistageDefaultAdapterToContentLeftInset:(XQMultistageDefaultAdapter *) adapter;

/**
* 多级展示节点展开提示图片功能代理
* 节点展开提示 是在 Cell 的左边
*/

// 根节点展开提示图片图片
- (UIImage *)xq_multistageDefaultAdapterToRootExpandTipImage:(XQMultistageDefaultAdapter *) adapter;

// 节点展开提示图片图片
- (UIImage *)xq_multistageDefaultAdapterToExpandTipImage:(XQMultistageDefaultAdapter *) adapter;

// 根节点展开提示图片 是否可以旋转
- (BOOL)xq_multistageDefaultAdapterToRootExpandTipImageIsRotation:(XQMultistageDefaultAdapter *) adapter;

/**
* 多级展示选择功能代理
* 节点选择图片是在 Cell 的右边
*/

// 是否启用选择展示功能 配合 XQMultistageNode->selectState 使用
- (BOOL)xq_multistageDefaultAdapterToSelectOperation:(XQMultistageDefaultAdapter *) adapter;

// 选择展示功能 -> 选中状态图片
- (UIImage *)xq_multistageDefaultAdapterToImageStateSelected:(XQMultistageDefaultAdapter *) adapter;

// 选择展示功能 -> 未选中状态图片
- (UIImage *)xq_multistageDefaultAdapterToImageStateNormal:(XQMultistageDefaultAdapter *) adapter; 

Remind

ARC
iOS>=6.0
iPhone \ iPad screen anyway
QQ群: XQKit&XQFramework 546456937
版权声明:本文为IT_IOS_MAN原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/IT-IOS-MAN/p/16891215.html