Giter Club home page Giter Club logo

wmztreeview's Introduction

UI效果仿照前端element-UI的Tree控件

Platform CocoaPods Compatible License

视图层

正常树形显示

这里显示十级 每级100条数据 总共1000条数据的效果图

treeNone.gif

WMZTreeViewParam *param =TreeViewParam() .wDataSet(@[TreeParam(),TreeParam()])
self.treeView = [[WMZTreeView alloc]initWithParam:param];
[self.view addSubview:self.treeView];

可选中树形+选中高亮显示

treeSelect.gif

TreeViewParam()
 //可勾选
.wShowCheckboxSet(YES)
 //节点字体高亮颜色
.wHighlightCurrentSet(TreeColor(0x1d76db))

自定义节点内容+增删节点

treeCell.gif

TreeViewParam()
 //自定义节点内容
.wEventTreeCellSet(^UITableViewCell *(id model, NSIndexPath *path,UITableView *table,id param) {
      WMZMyCell *cell = [table dequeueReusableCellWithIdentifier:@"WMZMyCell"];
       if (!cell) {
          cell = [[WMZMyCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"WMZMyCell" parentModel:param];
        }
      cell.model = model;
      return cell;
 })

增删实例方法

/*
 *为 Tree 中的一个节点追加一个子节点
  @param currrentID 当前节点
  @param param 子节点数据
  @return BOOL 是否追加成功
 */
- (BOOL)append:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *为 Tree 的一个节点的后面增加一个节点
  @param currrentID 当前节点
  @param param 子节点数据
  @return BOOL 是否追加成功
 */
- (BOOL)insertAfter:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *为 Tree 的一个节点的前面增加一个节点
  @param currrentID 当前节点
  @param param 子节点数据
  @return BOOL 是否追加成功
 */
- (BOOL)insertBefore:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *删除节点
  @param currrentID 当前节点
  @return BOOL 是否追加成功
 */
- (BOOL)remove:(NSString*)currrentID;


手风琴效果+指定层级可勾选 (这里选取3级结构,指定最后一级才可勾选)

treeCanSelect.gif

//手风琴效果 同级只展开一级
TreeViewParam().wAccordionSet(YES)

//能否选择
TreeParam().canSelectSet(NO)

勾选不关联父节点和子节点+默认选中+默认全部展开

treeCheck.gif

TreeViewParam()
//父节点和子节点 勾选不关联
.wCheckStrictlySet(NO)
//默认展开全部 
.wDefaultExpandAllSet(YES)
//默认勾选
.wDefaultExpandedKeysSet(@[@"5",@"10",@"12"])

开启拖拽

treeDraggable.gif

TreeViewParam()
//拖拽
.wDraggableSet(YES)

模型层

1 任意模型实现WMZTreeProcotol协议

参考WMZCustomModel

1.使用或继承WMZTreeParam (已经实现了WMZTreeProcotol协议)

WMZTreeParam *tree = WMZTreeParam.new;
tree.cueerntId =  @"1";
tree.parentId =  @"2";
tree.name =  @"第一级";

2.NSDictionary

    @[
        @{
            WMZTreeName:@"1级",
            WMZTreeCurrentId:@"1",
            WMZTreeChildren:@[
                    @{
                        WMZTreeName:@"1_2_1级",
                        WMZTreeCurrentId:@"1_2_1",
                        WMZTreeParentId:@"1",
                        WMZTreeChildren:@[
                                           @{
                                               WMZTreeName:@"1_3_1级",
                                               WMZTreeCurrentId:@"1_3_1",
                                               WMZTreeParentId:@"1_2_1",
                                           },
                                           @{
                                               WMZTreeName:@"1_3_2级",
                                               WMZTreeCurrentId:@"1_3_2",
                                               WMZTreeParentId:@"1_2_1",
                                           },
                                          @{
                                               WMZTreeName:@"1_3_3级",
                                               WMZTreeCurrentId:@"1_3_3",
                                               WMZTreeParentId:@"1_2_1",
                                           },
                                   ]
                    },
                    @{
                        WMZTreeName:@"1_2_2级",
                        WMZTreeCurrentId:@"1_2_2",
                        WMZTreeParentId:@"1",
                    },
                   @{
                        WMZTreeName:@"1_2_3级",
                        WMZTreeCurrentId:@"1_2_3",
                        WMZTreeParentId:@"1",
                    },
            ]
        },
        @{
            WMZTreeName:@"2级",
            WMZTreeCurrentId:@"2",
            WMZTreeChildren:@[
                    @{
                        WMZTreeName:@"2_2_1级",
                        WMZTreeCurrentId:@"2_2_1",
                        WMZTreeParentId:@"2",
                    },
                    @{
                        WMZTreeName:@"2_2_2级",
                        WMZTreeCurrentId:@"2_2_2",
                        WMZTreeParentId:@"2",
                    },
                   @{
                        WMZTreeName:@"2_2_3级",
                        WMZTreeCurrentId:@"2_2_3",
                        WMZTreeParentId:@"2",
                    },
            ]
        },
        @{
            WMZTreeName:@"3级",
            WMZTreeCurrentId:@"3",
            WMZTreeChildren:@[
                    @{
                        WMZTreeName:@"3_2_1级",
                        WMZTreeCurrentId:@"3_2_1",
                        WMZTreeParentId:@"3",
                    },
                    @{
                        WMZTreeName:@"3_2_2级",
                        WMZTreeCurrentId:@"3_2_2",
                        WMZTreeParentId:@"3",
                    },
                   @{
                        WMZTreeName:@"3_2_3级",
                        WMZTreeCurrentId:@"3_2_3",
                        WMZTreeParentId:@"3",
                    },
            ]
        }
    ]

配置参数

可配置参数 类型 作用
cueerntId NSString 当前节点ID 必传
parentId NSString 父节点ID,不传表示第一级
name NSString 显示的文本
isExpand BOOL 是否展开 默认NO
canSelect BOOL 能否选中 默认NO
data id 携带的其他数据

其他具体看demo

依赖

无任何依赖

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'WMZTreeView'
  3. 执行 pod installpod update
  4. 导入 #import "WMZTreeView.h"。

手动安装

  1. 下载 WMZTreeView 文件夹内的所有内容。
  2. 将 WMZTreeView 内的源文件添加(拖放)到你的工程。
  3. 导入 #import "WMZTreeView.h"

系统要求

该库最低支持 iOS 9.0Xcode 9.0

许可证

使用 MIT 许可证,详情见 LICENSE 文件。

个人主页

使用过程中如果有什么bug欢迎给我提issue 我看到就会解决 简书地址

wmztreeview's People

Contributors

wwmz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

wmztreeview's Issues

搜索功能

请问怎么添加搜索,reload更新搜索结果数据

数据排序问题

数据到底是根据什么来排序的啊,我递归好的数据,传进来,展示就乱了

判空加入数据奔溃问题

WMZTreeView.m中,

/*
*解析传入的数组 传入的WMZTreeParam组成的数组
*/

  • (void)dealTreeData:(NSArray*)items {
    for (int i = 0; i<items.count; i++) {
    @autoreleasepool {
    WMZTreeParam *model = items[i];
    [self.dic setObject:model forKey:model.currentId];
    }
    }
    NSMutableArray arr = [NSMutableArray new];
    [items enumerateObjectsUsingBlock:^(WMZTreeParam
    _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    @autoreleasepool {
    if (!obj.parentId) {
    [self.tree.children addObject:obj];
    }else{
    WMZTreeParam *param = self.dic[obj.parentId];
    if (param) {
    [param.children addObject:obj];

              [arr addObject:param];
    
          }
    

// [arr addObject:param];
}
}
}];

这个param虽然判空了,但是还是加入了arr,是不是应该放在里面?

更新数据

请问使用setParam更新数据之后,再使用WMZTreeView里面update方法更新,结果只是在原有基础上添加,有办法释放掉之前加载的数据吗?

数据重复

大佬,我在做搜索功能时,移除tree再添加后,数据会一直双倍增加。请问这是为什么?
if (TF.text.length%2 == 1) {
//销毁
[self.treeView removeFromSuperview];
self.treeView = nil;
}else {
//添加
[self addTree];
}

bug

勾选不关联父节点和子节点,来回1.0 1.1重复选中和取消,会默认选中一个2.5的情况

不能一次性添加多个子节点

目前只有 添加单个子节点 的方法:
func append(_ currrentID: String, node param: WMZTreeParam) -> Bool

虽然可以用 for 循环自己实现,还是希望加上一次添加多个子节点的方法

点击事件

最后一级选中/取消选中的点击事件能不能加到整个cell上面
[self.check addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside];

删掉默认的灰色背景吧

WMZTreeBaseView.m 中

`- (UITableView *)table{
if (!_table) {
_table = [[UITableView alloc]initWithFrame:self.bounds style:UITableViewStyleGrouped];

_table.backgroundColor = UIColor.clearColor;  // 增加当前行,删掉默认的灰色背景


    _table.estimatedRowHeight = 100;
    if (@available(iOS 11.0, *)) {
        _table.estimatedSectionFooterHeight = 0.01;
        _table.estimatedSectionHeaderHeight = 0.01;
        _table.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }
   _table.delegate = (id)self;
   _table.dataSource = (id)self;
}
return _table;

}`

关于拖拽移动

功能很不错 能否增加包含子集的节点的拖拽或移动的api

更新数据问题

大佬,. 更新数据, 忘记把对象给移除数据了, 我本地给依赖下来,改了代码

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.