iOS功能齊全的樹形控件

WMZTreeView

視圖層

正常樹形顯示

這里顯示十級 每級100條數(shù)據(jù) 總共1000條數(shù)據(jù)的效果圖


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

可選中樹形+選中高亮顯示

treeSelect.gif
TreeViewParam()
 //可勾選
.wShowCheckboxSet(YES)
 //節(jié)點字體高亮顏色
.wHighlightCurrentSet(TreeColor(0x1d76db))

自定義節(jié)點內(nèi)容+增刪節(jié)點

treeCell.gif
TreeViewParam()
 //自定義節(jié)點內(nèi)容
.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 中的一個節(jié)點追加一個子節(jié)點
  @param currrentID 當前節(jié)點
  @param param 子節(jié)點數(shù)據(jù)
  @return BOOL 是否追加成功
 */
- (BOOL)append:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *為 Tree 的一個節(jié)點的后面增加一個節(jié)點
  @param currrentID 當前節(jié)點
  @param param 子節(jié)點數(shù)據(jù)
  @return BOOL 是否追加成功
 */
- (BOOL)insertAfter:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *為 Tree 的一個節(jié)點的前面增加一個節(jié)點
  @param currrentID 當前節(jié)點
  @param param 子節(jié)點數(shù)據(jù)
  @return BOOL 是否追加成功
 */
- (BOOL)insertBefore:(NSString*)currrentID node:(WMZTreeParam*)param;

/*
 *刪除節(jié)點
  @param currrentID 當前節(jié)點
  @return BOOL 是否追加成功
 */
- (BOOL)remove:(NSString*)currrentID;


手風琴效果+指定層級可勾選 (這里選取3級結構,指定最后一級才可勾選)

treeCanSelect.gif
//手風琴效果 同級只展開一級
TreeViewParam().wAccordionSet(YES)

//能否選擇
TreeParam().canSelectSet(NO)

勾選不關聯(lián)父節(jié)點和子節(jié)點+默認選中+默認全部展開

treeCheck.gif
TreeViewParam()
//父節(jié)點和子節(jié)點 勾選不關聯(lián)
.wCheckStrictlySet(NO)
//默認展開全部 
.wDefaultExpandAllSet(YES)
//默認勾選
.wDefaultExpandedKeysSet(@[@"5",@"10",@"12"])

開啟拖拽( ?目前只支持沒有子節(jié)點的節(jié)點拖拽,避免嵌套數(shù)據(jù)的bug, 如果有什么方便的辦法可以支持多個連續(xù)的cell一起拖拽的告知下,不勝感激)

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

配置參數(shù)和方法

可配置參數(shù) 類型 作用
wData NSArray 展示數(shù)據(jù) 必傳
wFrame CGRect frame 必傳
wEmptyData NSDictionary 內(nèi)容為空的時候展示的數(shù)據(jù) default nil (image為圖片 name為文字)
wHighlightCurrent UIColor 高亮當前選中節(jié)點顏色囤躁,default nil
wNodeTextFont CGFloat 節(jié)點的字體大小 default 15.0f
wNodeTextColor UIColor 節(jié)點的字體顏色 default 333333
wDefaultExpandAll BOOL 是否默認展開所有節(jié)點 default NO
wCheckStrictly BOOL 在顯示復選框的情況下墨吓,是否嚴格的遵循父子互相關聯(lián)的做法,defualt為 YES
wHideExpanIcon BOOL 隱藏展開圖標洒擦,defualt為 NO
wShowCheckbox BOOL 節(jié)點是否可被選擇 default NO
wAccordion BOOL 是否每次只打開一個同級樹節(jié)點展開 手風琴效果 default NO
wDraggable BOOL 是否允許拖動cell蕉斜,默認為NO
wDefaultExpandedKeys NSArray 默認展開的節(jié)點的 key 的數(shù)組 default nil
wIndent NSInteger 相鄰級節(jié)點間的水平縮進距離 默認2
wExpandIcon NSString 自定義樹節(jié)點的圖標
wSelectExpandIcon NSString 自定義樹節(jié)點展開的圖標
wCheckIcon NSString 自定義樹節(jié)點未勾選的圖標
wSelectCheckIcon NSString 自定義樹節(jié)點勾選的圖標
wHalfSelectCheckIcon NSString 自定義樹節(jié)點半選中的圖標 (沒有全選)
可監(jiān)聽block事件 作用
wEventTreeCell 自定義節(jié)點cell
wEventCellUserEnabled 自定義cell其他交互
wEventCellHeight 自定義cell高度
wEventNodeClick 節(jié)點被點擊時的回調(diào)
wEventNodeDraggable 節(jié)點拖拽完成回調(diào)
wEventCheckChange 節(jié)點選中狀態(tài)發(fā)生變化時的回調(diào)
實例方法 作用
initWithParam 初始化
updateKeyChildren 更新或者設置子節(jié)點數(shù)組
getCheckedNodesWithHalfSelect 獲取當前選中的節(jié)點數(shù)組
append 為 Tree 中的一個節(jié)點追加一個子節(jié)點
remove 刪除節(jié)點
insertBefore 為 Tree 的一個節(jié)點的前面增加一個節(jié)點
insertAfter 為 Tree 的一個節(jié)點的后面增加一個節(jié)點
updateEditing 更新編輯狀態(tài)

模型層

  1. 支持 WMZTreeParam
TreeParam()
.cueerntIdSet(@"1")
.parentIdSet(@"2")
.nameSet(@"第一級")
.canSelectSet(YES)
.isExpandSet(YES)
.dataSet(@"")

2.支持 NSDictionary

@[@{
            @"name":@"1級",
            @"currentId":@"1",
            @"children":@[
                    @{
                        @"name":@"1_2_1級",
                        @"currentId":@"1_2_1",
                        @"parentId":@"1",
                        @"children":@[
                                           @{
                                               @"name":@"1_3_1級",
                                               @"currentId":@"1_3_1",
                                               @"parentId":@"1_2_1",
                                           },
                                           @{
                                               @"name":@"1_3_2級",
                                               @"currentId":@"1_3_2",
                                               @"parentId":@"1_2_1",
                                           },
                                          @{
                                               @"name":@"1_3_3級",
                                               @"currentId":@"1_3_3",
                                               @"parentId":@"1_2_1",
                                           },
                                   ]
                    },
                    @{
                        @"name":@"1_2_2級",
                        @"currentId":@"1_2_2",
                        @"parentId":@"1",
                    },
                   @{
                        @"name":@"1_2_3級",
                        @"currentId":@"1_2_3",
                        @"parentId":@"1",
                    },
            ]
    }]

配置參數(shù)

可配置參數(shù) 類型 作用
cueerntId NSString 當前節(jié)點ID 必傳
parentId NSString 父節(jié)點ID,不傳表示第一級
name NSString 顯示的文本
isExpand BOOL 是否展開 默認NO
canSelect BOOL 能否選中 默認NO
data id 攜帶的其他數(shù)據(jù)

其他具體看demo

依賴

無任何依賴

安裝

CocoaPods

  1. 將 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'WMZTreeView'逾柿。
  3. 執(zhí)行 pod installpod update
  4. 導入 #import "WMZTreeView.h"宅此。

注:要消除鏈式編程的警告

要在Buildding Settings 把CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 設為NO

手動安裝

  1. 下載 WMZTreeView 文件夾內(nèi)的所有內(nèi)容机错。
  2. 將 WMZTreeView 內(nèi)的源文件添加(拖放)到你的工程。
  3. 導入 #import "WMZTreeView.h"

使用過程中如果有什么bug歡迎給我提issue 我看到就會解決
GitHub地址

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末父腕,一起剝皮案震驚了整個濱河市弱匪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌璧亮,老刑警劉巖萧诫,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斥难,死亡現(xiàn)場離奇詭異,居然都是意外死亡帘饶,警方通過查閱死者的電腦和手機哑诊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來及刻,“玉大人搭儒,你說我怎么就攤上這事√嶙拢” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵馁菜,是天一觀的道長茴扁。 經(jīng)常有香客問我,道長汪疮,這世上最難降的妖魔是什么峭火? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮智嚷,結果婚禮上卖丸,老公的妹妹穿的比我還像新娘。我一直安慰自己盏道,他們只是感情好稍浆,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猜嘱,像睡著了一般衅枫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朗伶,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天弦撩,我揣著相機與錄音,去河邊找鬼论皆。 笑死益楼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的点晴。 我是一名探鬼主播感凤,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼觉鼻!你這毒婦竟也來了俊扭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤坠陈,失蹤者是張志新(化名)和其女友劉穎萨惑,沒想到半個月后捐康,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡庸蔼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年解总,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姐仅。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡花枫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掏膏,到底是詐尸還是另有隱情劳翰,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布馒疹,位于F島的核電站佳簸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏颖变。R本人自食惡果不足惜生均,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腥刹。 院中可真熱鬧马胧,春花似錦、人聲如沸衔峰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垫卤。三九已至邻吞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間葫男,已是汗流浹背抱冷。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梢褐,地道東北人旺遮。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像盈咳,于是被迫代替她去往敵國和親耿眉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 我們在選擇任何行業(yè)的時候鱼响,妳盡管觀察鸣剪,有的人從事壹個行業(yè)數(shù)十年都沒有起色的,那是因為所做的行業(yè)壹是無根,二是所做行...
    趙垣媛閱讀 151評論 0 1
  • 作者 艾米 ??馬伊琍主演的電視劇我都會追一下筐骇,前段時間熱播的《我的前半生》我也沒有錯過债鸡。 在這部電視劇里不僅有情...
    zi言字語閱讀 223評論 0 0