for i = 1 ,#config["初级地图"] do
local newbtn = GUI:Clone(ui.rbt1)
GUI:ListView_pushBackCustomItem(ui.ListView_1, newbtn)
GUI:Button_setTitleText(newbtn, config["初级地图"][i].name)
GUI:setName(newbtn,"newbtn"..i)
GUI:Button_set
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-24 11:47:44 |
👁️ 阅读: 2
你的代码逻辑有问题,点击事件中获取按钮的方式不对。`ui["newbtn"..i]` 在点击时无法正确获取到按钮对象,因为 `ui` 表里没有这个键。
**正确做法:** 在循环中记录当前按钮,并在点击事件内直接使用它,同时需要重置其他按钮的颜色。
```lua
-- 假设 config["初级地图"] 是一个表,存储了地图信息
for i = 1, #config["初级地图"] do
-- 克隆模板按钮
local newbtn = GUI:Clone(ui.rbt1)
-- 设置按钮唯一名称(便于调试,但非必须)
GUI:setName(newbtn, "newbtn" .. i)
-- 设置按钮显示文本
GUI:Button_setTitleText(newbtn, config["初级地图"][i].name)
-- 默认颜色设为灰色或其他未选中色
GUI:Button_setTitleColor(newbtn, "#888888")
-- 将按钮添加到列表
GUI:ListView_pushBackCustomItem(ui.ListView_1, newbtn)
-- 为按钮绑定点击事件
GUI:addOnClickEvent(newbtn, function()
-- 1. 先将列表中所有按钮恢复默认颜色
for j = 1, #config["初级地图"] do
local btn = GUI:ListView_getItem(ui.ListView_1, j - 1) -- 索引从0开始
if not GUI:Win_IsNull(btn) then
GUI:Button_setTitleColor(btn, "#888888")
end
end
-- 2. 设置当前点击的按钮为选中颜色
GUI:Button_setTitleColor(newbtn, "#00ff00")
-- 3. 更新右侧信息显示
local mapInfo = config["初级地图"][i]
GUI:Text_setString(ui.Text_1, '地图名字:' .. mapInfo.name)
GUI:Text_setString(ui.Text_2, '进入条件:' .. mapInfo.lv .. '级进入')
GUI:Text_setString(ui.Text_3, '收费情况:' .. mapInfo.money .. '金币')
end)
end
```
**关键点:**
1. **`newbtn` 是局部变量**,在点击事件的闭包中可以直接使用,无需通过 `ui` 表查找。
2. 使用 `GUI:ListView_getItem(listView, index)` 来遍历列表中的按钮并重置颜色。
3. 先重置所有按钮颜色,再设置当前选中按钮的颜色,实现“单选”效果。
这样修改后,点击不同按钮时,颜色就能正确切换了。
你的代码逻辑有问题,点击事件中获取按钮的方式不对。`ui["newbtn"..i]` 在点击时无法正确获取到按钮对象,因为 `ui` 表里没有这个键。
**正确做法:** 在循环中记录当前按钮,并在点击事件内直接使用它,同时需要重置其他按钮的颜色。
```lua
-- 假设 config["初级地图"] 是一个表,存储了地图信息
for i = 1, #config["初级地图"] do
-- 克隆模板按钮
local newbtn = GUI:Clone(ui.rbt1)
-- 设置按钮唯一名称(便于调试,但非必须)
GUI:setName(newbtn, "newbtn" .. i)
-- 设置按钮显示文本
GUI:Button_setTitleText(newbtn, config["初级地图"][i].name)
-- 默认颜色设为灰色或其他未选中色
GUI:Button_setTitleColor(newbtn, "#888888")
-- 将按钮添加到列表
GUI:ListView_pushBackCustomItem(ui.ListView_1, newbtn)
-- 为按钮绑定点击事件
GUI:addOnClickEvent(newbtn, function()
-- 1. 先将列表中所有按钮恢复默认颜色
for j = 1, #config["初级地图"] do
local btn = GUI:ListView_getItem(ui.ListView_1, j - 1) -- 索引从0开始
if not GUI:Win_IsNull(btn) then
GUI:Button_setTitleColor(btn, "#888888")
end
end
-- 2. 设置当前点击的按钮为选中颜色
GUI:Button_setTitleColor(newbtn, "#00ff00")
-- 3. 更新右侧信息显示
local mapInfo = config["初级地图"][i]
GUI:Text_setString(ui.Text_1, '地图名字:' .. mapInfo.name)
GUI:Text_setString(ui.Text_2, '进入条件:' .. mapInfo.lv .. '级进入')
GUI:Text_setString(ui.Text_3, '收费情况:' .. mapInfo.money .. '金币')
end)
end
```
**关键点:**
1. **`newbtn` 是局部变量**,在点击事件的闭包中可以直接使用,无需通过 `ui` 表查找。
2. 使用 `GUI:ListView_getItem(listView, index)` 来遍历列表中的按钮并重置颜色。
3. 先重置所有按钮颜色,再设置当前选中按钮的颜色,实现“单选”效果。
这样修改后,点击不同按钮时,颜色就能正确切换了。
← 返回问答库