diff --git a/03_核心功能/UI开发指南.md b/03_核心功能/UI开发指南.md index 7df6d5c..f7956e5 100644 --- a/03_核心功能/UI开发指南.md +++ b/03_核心功能/UI开发指南.md @@ -145,7 +145,7 @@ img.HFClearSprite(); ### 3.4 SFUI_ScrollRect组件(列表滚动) -SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,提供高效的列表渲染和滚动管理。 +SFUI_ScrollRect 专门用于处理多物品的上下滑动列表,**内置对象池机制实现循环列表**,提供高效的列表渲染和滚动管理。 ```csharp SFUI_ScrollRect scroll = GetComponent(); @@ -166,15 +166,38 @@ scroll.ScrollToIndex(0); // 滚动到第N项 scroll.verticalNormalizedPosition = 0; // 滚动到底部(1=顶部,0=底部) ``` +**BindEvent 参数说明**: + +| 参数 | 类型 | 说明 | +|-----|------|------| +| 1 | `Func` | 返回数据总数 | +| 2 | `Func` | 根据索引返回模板对象 | +| 3 | `Action` | 列表项更新回调 | +| 4 | `Func` | 获取列表项组件 | + +**更新回调示例**: +```csharp +private void OnUpdateItem(SFUI_ScrollRectItem _item) +{ + ItemSlot slot = _item.simulateBehaviour as ItemSlot; + ItemData data = itemList[_item.dataIdx]; + slot.SetData(data, OnItemClick); +} +``` + **使用流程**: 1. 在 `OnRunAwake` 中调用 `BindEvent` 绑定数据 2. 在 `OnOpen` 或数据更新时调用 `ShowView` 刷新显示 3. 通过 `ScrollToIndex` 或 `verticalNormalizedPosition` 控制滚动位置 +> **注意**:SFUI_ScrollRect 已内置对象池机制,**无需额外使用 HFSimulateBehaviourPool** 实现循环列表。 + --- ## 四、对象池模式 +> **注意**:**循环滚动列表请使用 `SFUI_ScrollRect.BindEvent`**,HFSimulateBehaviourPool 适用于非滚动场景的对象复用。 + ### 4.1 对象池初始化 ```csharp @@ -194,7 +217,7 @@ protected override void OnRunAwake() } ``` -### 4.2 对象池使用 +### 4.2 对象池使用(适用于固定数量场景) ```csharp private void RefreshItems() @@ -210,12 +233,26 @@ private void RefreshItems() } } -private void OnItemClick(ItemData data) +// 适用于固定数量的装备栏、技能栏等场景 +private void ShowEquipedCards() { - // 处理点击逻辑 + m_CardItems.RecycUsingObject(); + for (int i = 0; i < 5; i++) + { + var item = m_CardItems.GetItem(out bool isNew); + // 设置数据... + } } ``` +### 4.3 适用场景对比 + +| 场景 | 推荐方式 | 说明 | +|-----|---------|------| +| **滚动列表** | `SFUI_ScrollRect.BindEvent` | 自动实现循环复用 | +| **固定数量栏** | `HFSimulateBehaviourPool` | 如装备栏、技能栏(5个固定位置) | +| **动态弹窗** | `HFSimulateBehaviourPool` | 需要频繁创建销毁的弹窗 | + --- ## 五、子组件开发