Unity编辑器 - TreeView控件笔记
用起来有一些规则,写个简单的案例以备查阅:
using System.Collections.Generic;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
public class MyTreeView : TreeView {
//搜索控件
SearchField _searchField = new SearchField();
List<object> allData = new List<object>();
public MyTreeView(TreeViewState state) : base(state) {
//构造函数, 需要一个TreeViewState
// 对TreeView进行一些设置
rowHeight = 20;
showBorder = true;
Reload();
}
// 绘制树,外部调用
public override void OnGUI(Rect rect) {
Rect srect = rect;
srect.height = 18f;
searchString = _searchField.OnGUI(rect, searchString);
rect.y += 18f;
base.OnGUI(rect);
}
protected override TreeViewItem BuildRoot() {
//这里创建根节点, depth=-1时表示不可见
return new TreeViewItem { id = 0, depth = -1, displayName = "root" };
}
protected override IList<TreeViewItem> BuildRows(TreeViewItem root) {
//这里基于root节点建立树
//清空原来的行
IList<TreeViewItem> rows = GetRows();
rows = new List<TreeViewItem>();
if (!string.IsNullOrEmpty(searchString)) {
//如果搜索控件有输入内容,则要根据搜索字符串来建立所有的行
//自己根据 searchString 写搜索结果
}
else {
//建立所有的行
foreach (var data in allData) {
TreeViewItem item = new TreeViewItem();
// item.id = data.。。。
root.AddChild(item);
}
}
//根据父子关系建立深度
SetupDepthsFromParentsAndChildren(root);
return base.BuildRows(root);
}
//可以写个公开办法从外部调用来建立树
public void FetchData(List<object> alldata) {
allData = alldata;
//接着
BuildRows(rootItem);
//最后
Reload();
}
}
官方资料:
TreeView Examples project: here
TreeView Manual: here
TreeView API Documentation: here
MultiColumnHeader API Documentation: here