获取到的克隆出来的按钮id都一样 怎么改变id 让红点有效
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-07-06 15:13:55 |
👁️ 阅读: 3
在996引擎中,克隆控件时确实需要注意ID的唯一性,否则红点等功能会失效。以下是解决方案:
```lua
-- 创建父节点
local parent = GUI:Win_Create("GMMain", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建原始按钮
local originalBtn = GUI:Button_Create(parent, "btn_original", 100, 100, "res/public/1900000612.png")
GUI:Button_setTitleText(originalBtn, "原始按钮")
-- 克隆按钮时设置唯一ID
local cloneCount = 3
for i = 1, cloneCount do
-- 为每个克隆按钮设置唯一ID
local uniqueID = string.format("btn_clone_%d_%d", os.time(), i)
-- 克隆按钮
local clonedBtn = GUI:cloneWidget(originalBtn)
-- 设置唯一名称(ID)
GUI:setName(clonedBtn, uniqueID)
-- 设置位置
GUI:setPosition(clonedBtn, 100, 200 + i * 60)
-- 添加到父节点
GUI:addChild(parent, clonedBtn)
-- 设置红点(每个红点也需要唯一ID)
local redDotID = string.format("red_dot_%d", i)
local redDot = GUI:Image_Create(clonedBtn, redDotID, 40, 40, "res/public/red_dot.png")
GUI:setVisible(redDot, true)
-- 通过唯一ID获取克隆按钮(验证)
local foundBtn = GUI:getChildByName(parent, uniqueID)
if not GUI:Win_IsNull(foundBtn) then
SL:Print("成功找到克隆按钮:", uniqueID)
end
end
```
**关键点说明:**
1. **ID必须唯一**:使用`os.time()`和索引组合创建唯一ID
2. **设置名称**:克隆后使用`GUI:setName(widget, uniqueID)`设置唯一ID
3. **红点也要唯一**:每个红点控件也需要设置唯一ID
4. **通过ID查找**:使用`GUI:getChildByName(parent, uniqueID)`可以准确找到特定克隆
**红点有效性的核心**:
- 每个红点控件必须有唯一ID
- 通过`GUI:setVisible(redDot, true/false)`控制显示
- 使用`GUI:getChildByName(parent, "red_dot_xxx")`获取指定红点
这样每个克隆按钮和红点都有唯一ID,红点功能就能正常工作了!
← 返回问答库