Swift開發(fā)使用RATreeView搭建樹形視圖

項(xiàng)目中需要有樹形圖結(jié)構(gòu)的視圖,研究了一下RATreeView,搭建完成。用到的方法拿出來跟大家分享一下,希望可以幫到大家。

先看一下效果圖
效果圖
項(xiàng)目地址

github

swift使用RATreeView方法說明

1.cocopods集成項(xiàng)目
2.在橋文件引入RATreeView
3.具體方法使用

聲明視圖
let treeView = RATreeView()
treeView.frame = CGRect(x: 0, y: 40, width: SCREEN_WIDTH, height: SCREEN_HEIGHT - 64)
treeView.treeFooterView = UIView()
treeView.delegate = self
treeView.dataSource = self
treeView.register(AgentTreeTableViewCell.self,forCellReuseIdentifier: "cell")
主要方法

樹形圖的行數(shù)

 func treeView(_ treeView: RATreeView, numberOfChildrenOfItem item: Any?) -> Int {
        if let item = item as? 數(shù)據(jù)類型 {
            return item.children!.count //子數(shù)目
        } else {
            return self.data.count//根數(shù)目
        }
}

每行返回的對應(yīng)的數(shù)據(jù)

func treeView(_ treeView: RATreeView, child index: Int, ofItem item: Any?) -> Any {
      if let item = item as? 數(shù)據(jù)類型  {
            return item.children![index]
        } else {
            return data[index] as AnyObject
        }
}

cell視圖

func treeView(_ treeView: RATreeView, cellForItem item: Any?) -> UITableViewCell {
        //聲明cell
        let cell = treeView.dequeueReusableCell(withIdentifier: "cell") as! AgentTreeTableViewCell 
        //獲取數(shù)據(jù)
        let thisItem = item as! 數(shù)據(jù)類型 
        //獲取當(dāng)前cell的層級,可進(jìn)行縮進(jìn)或其他操作
        let level = treeView.levelForCell(forItem: thisItem)
        cell.selectionStyle = .none
        cell.setUpData(thisItem.agentName!, level: level,children:thisItem.children!)
        
        cell.leftIcon.agentInfo = thisItem
        cell.leftIcon.addTarget(self, action: #selector(toClickOkBtn(_:)), for: .touchUpInside)
        return cell
 }

cell點(diǎn)擊事件

func treeView(_ treeView: RATreeView, didSelectRowForItem item: Any) {
}
項(xiàng)目中其余有用方法

關(guān)閉側(cè)滑cell出現(xiàn)編輯(默認(rèn)是開啟的)

func treeView(_ treeView: RATreeView, canEditRowForItem item: Any) -> Bool {
     return false
}

展開與關(guān)閉數(shù)據(jù)

1.全部展開

self.treeView.reloadData()//一定要寫著reloadData()之后
self.treeView.expandRow(forItem: self.data[0], expandChildren: true, with: RATreeViewRowAnimationNone)

2.關(guān)閉點(diǎn)擊cell展開與關(guān)閉
treeview默認(rèn)的是點(diǎn)擊cell展開或關(guān)閉該組數(shù)據(jù),如果不想使用cell默認(rèn)的點(diǎn)擊事件進(jìn)行展開或關(guān)閉,想自己重寫,或者把展開關(guān)閉事件放到指定的按鈕上怎么辦

1)第一種方法

treeView.allowsSelection = false

設(shè)置之后cell點(diǎn)擊事件被禁止,如果自己在didSelectRowForItem方法里設(shè)置事件也會被禁止。

2)第二種方法

func treeView(_ treeView: RATreeView, shouldExpandRowForItem item: Any) -> Bool {
     return false
}

這種方法會禁止默認(rèn)的展開與關(guān)閉事件,而且不會禁止didSelectRowForItem方法。

禁止之后怎么將展開與關(guān)閉事件放到按鈕或其他控件呢

let isExpanded = treeView.isCell(forItemExpanded:點(diǎn)擊當(dāng)前行的item)//可以判斷當(dāng)前行是否展開
if isExpanded {
  treeView.collapseRow(forItem: item, collapseChildren: true, with: RATreeViewRowAnimationAutomatic)
} else {
  reeView.expandRow(forItem: item, expandChildren: false, with: RATreeViewRowAnimationAutomatic)
}

項(xiàng)目中用到的就這些,如果大家還有什么補(bǔ)充或疑惑,歡迎私信或評論,點(diǎn)個贊吧。謝謝大家

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,193評論 8 265
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,171評論 3 119
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,753評論 25 709
  • 故鄉(xiāng)的原風(fēng)景 10幾年前聽過這一曲,那是《神雕俠侶》的背景音樂。當(dāng)時并未太在意。因?yàn)槟昙o(jì)的關(guān)系,...
    腎毒閱讀 284評論 29 26
  • 如果一只兔子愛上了狼,它應(yīng)該怎么向狼表白呢? 當(dāng)我眼中還是孩子們的一代人開始抱怨生活的時候,我真真確確地感覺自己老...
    半朽閱讀 714評論 8 13

友情鏈接更多精彩內(nèi)容