ugui 通用页签管理器

Posted sanyejun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ugui 通用页签管理器相关的知识,希望对你有一定的参考价值。

一直是个痛点,这次解决了, ugui通用

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

/// <summary>
/// UGUI页签管理器
/// 
/// 管理器挂上UITabManager
/// 页签按钮挂上UITabButton
/// 页签内容挂上继承了ITabContent接口的脚本
/// 注意面板赋值
/// </summary>
public class UITabManager : MonoBehaviour
{
    //页签按钮列表
    public List<UITabButton> tabButtonList;
    //页签列表
    private List<GameObject> tabContentList = new List<GameObject>();
    //当前页签
    private GameObject curContentObj;

    // Start is called before the first frame update
    void Start()
    {
        foreach (var one in tabButtonList)
        {
            tabContentList.Add(one.tabContent);
            //默认打开第一个
            if (tabContentList.Count == 1)
            {
                curContentObj = one.tabContent;
                OpenCurTabContent();
            }
            else
            {
                one.tabContent.SetActive(false);
            }
            one.btn.onClick.AddListener(() =>
            {
                //避免重复点击
                if (curContentObj != one.tabContent)
                {
                    curContentObj.GetComponent<ITabContent>().CloseTabContent();
                    curContentObj = one.tabContent;
                    OpenCurTabContent();
                }
            });
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //打开当前页签
    public void OpenCurTabContent()
    {
        if (curContentObj != null)
        {
            print(curContentObj.name);
            curContentObj.GetComponent<ITabContent>().OpenTabContent();    
        }
    }
}

按钮挂载,并拖到UITabManager的tabButtonList上去

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UITabButton : MonoBehaviour
{
    public Button btn;
    public GameObject tabContent;
    
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

接口

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public interface ITabContent
{
    void OpenTabContent();
    void CloseTabContent();
}

 

以上是关于ugui 通用页签管理器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android片段管理器传递变量[重复]

massCode 一款优秀的开源代码片段管理器

Android:使用支持片段管理器时复制片段

如何在片段着色器中平铺部分纹理

片段 XXX 未与片段管理器关联

片段未与片段管理器关联。 (对话片段)