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

效果圖
項(xiàng)目地址
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)個贊吧。謝謝大家