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

猜你喜欢

转载自blog.csdn.net/ltycloud/article/details/79530551