切换标签

This commit is contained in:
xmac
2025-05-23 11:48:20 +08:00
parent 4b7a6b1dc8
commit 0c44f985ec
31 changed files with 295 additions and 111 deletions

View File

@@ -0,0 +1,25 @@
/**本脚本为自动生成每次生成会覆盖请勿手动修改生成插件文档及项目地址https://git.whoot.com/whoot-games/whoot.fguieditorplugin**/
using FairyGUI;
using FairyGUI.Utils;
using NBC;
namespace NBF
{
public partial class ClassifyList
{
public const string URL = "ui://6hgkvlaudrkwh1";
public GList List;
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
List = (GList)GetChild("List");
OnInited();
UILanguage.TrySetComponentLanguage(this);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 75f98daf87c484ef782216da87003f53

View File

@@ -0,0 +1,69 @@
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
using System;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
using NBC;
namespace NBF
{
public partial class ClassifyList : GComponent
{
private readonly List<object> _listData = new List<object>();
public event Action<object> OnClickItem;
public int SelectedIndex => List.selectedIndex;
private void OnInited()
{
List.itemProvider = GetListItemResource;
List.itemRenderer = OnRenderItem;
List.onClickItem.Add(OnClickListItem);
}
public void SetListData(List<object> listData)
{
_listData.Clear();
foreach (var obj in listData)
{
_listData.Add(obj);
}
List.numItems = _listData.Count;
List.ScrollToView(0);
}
void OnClickListItem(EventContext context)
{
Debug.Log($"con={context.data} nm={context.sender}");
OnClickItem?.Invoke(null);
}
void OnRenderItem(int index, GObject obj)
{
if (obj is ListItemBase item)
{
item.SetData(_listData[index]);
}
}
//根据索引的不同返回不同的资源URL
string GetListItemResource(int index)
{
var itemData = _listData[index];
if (itemData is ShopGearData shopItem)
{
return ShopGearItem.URL;
}
if (itemData is ListClassifyData item)
{
return ListTitleItem.URL;
}
return List.defaultItem;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ec101ca53ba6849efa2e51492b6310cf

View File

@@ -1,6 +1,7 @@
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
using System;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
using NBC;
@@ -14,15 +15,29 @@ namespace NBF
private void OnInited()
{
BtnClose.onClick.Add(OnClickClose);
List.onClickItem.Add(OnClickItem);
}
public void SetTabs()
public void SetTabs(List<TabListData> tabList,int selectIndex = 0)
{
List.RemoveChildrenToPool();
for (int i = 0; i < tabList.Count; i++)
{
var tabData = tabList[i];
var tabItem = List.AddItemFromPool().asButton;
tabItem.title = tabData.TabName;
}
Log.Info($"Set tab index={List.selectedIndex}");
List.selectedIndex = selectIndex;
OnClickItem();
}
private void OnClickItem()
{
OnTabChange?.Invoke(List.selectedIndex);
}
private void OnClickClose()
{
OnClose?.Invoke();

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c64fdab373ea4ce29f82649e8be2a186
timeCreated: 1747969700

View File

@@ -0,0 +1,14 @@
using FairyGUI;
namespace NBF
{
public abstract class ListItemBase : GButton
{
public virtual void SetData(object showData)
{
OnSetData(showData);
}
protected abstract void OnSetData(object showData);
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 380c357d667646b69158440a7d7eecd9
timeCreated: 1747969715

View File

@@ -0,0 +1,25 @@
/**本脚本为自动生成每次生成会覆盖请勿手动修改生成插件文档及项目地址https://git.whoot.com/whoot-games/whoot.fguieditorplugin**/
using FairyGUI;
using FairyGUI.Utils;
using NBC;
namespace NBF
{
public partial class ListTitleItem
{
public const string URL = "ui://6hgkvlauoomea";
public GImage back;
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
back = (GImage)GetChild("back");
OnInited();
UILanguage.TrySetComponentLanguage(this);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8042079334b43394ca275c4a2189dbfb

View File

@@ -0,0 +1,27 @@
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
using UnityEngine;
using FairyGUI;
using NBC;
namespace NBF
{
public partial class ListTitleItem : ListItemBase
{
public ListClassifyData ClassifyData;
private void OnInited()
{
}
protected override void OnSetData(object showData)
{
width = parent.width - 40;
ClassifyData = showData as ListClassifyData;
if (ClassifyData == null)
{
ClassifyData = new ListClassifyData(string.Empty);
}
title = ClassifyData.Title;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d1c42293e0f4ae546ba4419aa2ed199c

View File

@@ -0,0 +1,30 @@
using System.Collections.Generic;
using UnityEngine;
namespace NBF
{
public class TabListData
{
public string TabName;
public bool Selected;
public List<object> ListData;
public void AddTestData(int index)
{
ListData = new List<object>();
TabName = $"标题-{index + 1}";
var count1 = Random.Range(5, 10);
var count2 = Random.Range(10, 30);
for (int i = 0; i < count1; i++)
{
ListData.Add(new ListClassifyData($"Title-{i}"));
for (int j = 0; j < count2; j++)
{
var item = new ShopGearData();
item.title = $"Item {i}-" + j;
ListData.Add(item);
}
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 47a09808fe3440d59857224bdc01a91f
timeCreated: 1747970638