function SuiPianDuiHuan:initUI(data)
local ui = self.ui
self.select = 1
for i=1,#_cfg do
-- Create Image_2
local Image_2 = GUI:Image_Create(ui.ListView_1, "Image_2", 0, 245, "res/custom/SuiPianDuiHuan/2.png")
GUI:s
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-18 17:56:55 |
👁️ 阅读: 16
你这段代码有几个关键问题需要修正:
1. **字符串分割函数不存在**:在浮生梦老师的前端课程中,没有 `string.split()` 这个函数,应该使用 `string.gmatch()` 或 `string.match()`
2. **列表项添加方式错误**:创建了 `Image_2` 作为列表项,但没有正确添加到 `ListView` 中
3. **循环变量冲突**:`i` 在循环中使用,但创建控件时没有使用唯一ID
修正后的代码:
```lua
function SuiPianDuiHuan:initUI(data)
local ui = self.ui
self.select = 1
for i=1,#_cfg do
-- 创建列表项容器
local item = GUI:Widget_Create(nil, "item_"..i, 0, 0, 600, 300)
-- Create Image_2
local Image_2 = GUI:Image_Create(item, "Image_2_"..i, 0, 0, "res/custom/SuiPianDuiHuan/2.png")
GUI:setAnchorPoint(Image_2, 0.00, 0.00)
GUI:setTouchEnabled(Image_2, false)
GUI:setTag(Image_2, 0)
-- Create Image_3
local Image_3 = GUI:Image_Create(Image_2, "Image_3_"..i, 9, 6, "res/custom/SuiPianDuiHuan/3.png")
GUI:setAnchorPoint(Image_3, 0.00, 0.00)
GUI:setTouchEnabled(Image_3, false)
GUI:setTag(Image_3, 0)
-- Create Button_2
local Button_2 = GUI:Button_Create(Image_2, "Button_2_"..i, 447, 16, "res/custom/SuiPianDuiHuan/1.png")
GUI:Button_setTitleText(Button_2, "兑换")
GUI:Button_setTitleColor(Button_2, "#ffffff")
GUI:Button_setTitleFontSize(Button_2, 16)
GUI:Button_titleEnableOutline(Button_2, "#000000", 1)
GUI:setAnchorPoint(Button_2, 0.00, 0.00)
GUI:setTouchEnabled(Button_2, true)
GUI:setTag(Button_2, 0)
-- 正确的字符串分割方式
local idxStr = tostring(_cfg[i].idx or "")
local duihuanwuStr = tostring(_cfg[i].duihuanwu or "")
-- 使用 string.gmatch 进行分割
local a, b = 0, 0
local c, d = 0, 0
-- 分割 idxStr
for num in string.gmatch(idxStr, "%d+") do
if a == 0 then
a = tonumber(num) or 0
else
b = tonumber(num) or 0
break
end
end
-- 分割 duihuanwuStr
for num in string.gmatch(duihuanwuStr, "%d+") do
if c == 0 then
c = tonumber(num) or 0
else
d = tonumber(num) or 0
break
end
end
-- Create ItemShow_1
local ItemShow_1 = GUI:ItemShow_Create(Image_2, "ItemShow_1_"..i, 104, 31,
{index = a, count = b, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_1, 0.50, 0.50)
GUI:setTag(ItemShow_1, 0)
-- Create ItemShow_2
local ItemShow_2 = GUI:ItemShow_Create(Image_2, "ItemShow_2_"..i, 384, 31,
{index = c, count = d, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_2, 0.50, 0.50)
GUI:setTag(ItemShow_2, 0)
-- 添加到ListView
GUI:ListView_insertCustomItem(ui.ListView_1, item, i)
end
end
```
主要修改点:
1. 使用 `string.gmatch()` 替代不存在的 `string.split()`
2. 为每个控件添加唯一ID后缀(`_"..i`)
3. 创建 `item` 作为列表项容器,然后添加到 `ListView`
4. 给按钮添加了"兑换"文字
5. 使用 `ListView_insertCustomItem()` 正确添加列表项
注意:如果还有问题,记得检查 `_cfg` 表的结构和 `ui.ListView_1` 是否已正确创建。
你这段代码有几个关键问题需要修正:
1. **字符串分割函数不存在**:在浮生梦老师的前端课程中,没有 `string.split()` 这个函数,应该使用 `string.gmatch()` 或 `string.match()`
2. **列表项添加方式错误**:创建了 `Image_2` 作为列表项,但没有正确添加到 `ListView` 中
3. **循环变量冲突**:`i` 在循环中使用,但创建控件时没有使用唯一ID
修正后的代码:
```lua
function SuiPianDuiHuan:initUI(data)
local ui = self.ui
self.select = 1
for i=1,#_cfg do
-- 创建列表项容器
local item = GUI:Widget_Create(nil, "item_"..i, 0, 0, 600, 300)
-- Create Image_2
local Image_2 = GUI:Image_Create(item, "Image_2_"..i, 0, 0, "res/custom/SuiPianDuiHuan/2.png")
GUI:setAnchorPoint(Image_2, 0.00, 0.00)
GUI:setTouchEnabled(Image_2, false)
GUI:setTag(Image_2, 0)
-- Create Image_3
local Image_3 = GUI:Image_Create(Image_2, "Image_3_"..i, 9, 6, "res/custom/SuiPianDuiHuan/3.png")
GUI:setAnchorPoint(Image_3, 0.00, 0.00)
GUI:setTouchEnabled(Image_3, false)
GUI:setTag(Image_3, 0)
-- Create Button_2
local Button_2 = GUI:Button_Create(Image_2, "Button_2_"..i, 447, 16, "res/custom/SuiPianDuiHuan/1.png")
GUI:Button_setTitleText(Button_2, "兑换")
GUI:Button_setTitleColor(Button_2, "#ffffff")
GUI:Button_setTitleFontSize(Button_2, 16)
GUI:Button_titleEnableOutline(Button_2, "#000000", 1)
GUI:setAnchorPoint(Button_2, 0.00, 0.00)
GUI:setTouchEnabled(Button_2, true)
GUI:setTag(Button_2, 0)
-- 正确的字符串分割方式
local idxStr = tostring(_cfg[i].idx or "")
local duihuanwuStr = tostring(_cfg[i].duihuanwu or "")
-- 使用 string.gmatch 进行分割
local a, b = 0, 0
local c, d = 0, 0
-- 分割 idxStr
for num in string.gmatch(idxStr, "%d+") do
if a == 0 then
a = tonumber(num) or 0
else
b = tonumber(num) or 0
break
end
end
-- 分割 duihuanwuStr
for num in string.gmatch(duihuanwuStr, "%d+") do
if c == 0 then
c = tonumber(num) or 0
else
d = tonumber(num) or 0
break
end
end
-- Create ItemShow_1
local ItemShow_1 = GUI:ItemShow_Create(Image_2, "ItemShow_1_"..i, 104, 31,
{index = a, count = b, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_1, 0.50, 0.50)
GUI:setTag(ItemShow_1, 0)
-- Create ItemShow_2
local ItemShow_2 = GUI:ItemShow_Create(Image_2, "ItemShow_2_"..i, 384, 31,
{index = c, count = d, look = true, bgVisible = false, color = 255})
GUI:setAnchorPoint(ItemShow_2, 0.50, 0.50)
GUI:setTag(ItemShow_2, 0)
-- 添加到ListView
GUI:ListView_insertCustomItem(ui.ListView_1, item, i)
end
end
```
主要修改点:
1. 使用 `string.gmatch()` 替代不存在的 `string.split()`
2. 为每个控件添加唯一ID后缀(`_"..i`)
3. 创建 `item` 作为列表项容器,然后添加到 `ListView`
4. 给按钮添加了"兑换"文字
5. 使用 `ListView_insertCustomItem()` 正确添加列表项
注意:如果还有问题,记得检查 `_cfg` 表的结构和 `ui.ListView_1` 是否已正确创建。
← 返回问答库