chicken_dy/Assets/Scripts/Utils/UITools/UIListView/UIListView.cs

80 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class UIListView<T> : MonoBehaviour, IListView where T : UIListCell
{
public abstract int Count
{
get;
}
[SerializeField] GameObject mTplCell;
[SerializeField] Transform mCtnCells;
protected List<T> mCellList;
public virtual void Show(bool pShow)
{
gameObject.SetActive(pShow);
}
public virtual void LoadData()
{
if (mCellList == null)
{
mCellList = new List<T>();
}
for (int i = 0; i < Count; i++)
{
T tCell = null;
if (i < mCellList.Count)
{
tCell = mCellList[i];
}
else
{
tCell = SpawnCell();
mCellList.Add(tCell);
}
tCell.gameObject.SetActive(true);
tCell.SetIndex(i);
ConfigCell(tCell);
}
HideUnused();
}
public virtual void ClearSelection()
{
}
protected abstract void ConfigCell(T pCell);
private T SpawnCell()
{
GameObject tCellOb = Instantiate(mTplCell, mCtnCells);
tCellOb.transform.localScale = Vector3.one;
return tCellOb.GetComponent<T>();
}
private void HideUnused()
{
for (int i = Count; i < mCellList.Count; i++)
{
mCellList[i].gameObject.SetActive(false);
}
}
}
public interface IListView
{
void Show(bool pShow);
void LoadData();
void ClearSelection();
}