CeShiYuan = Class("CeShiYuan", BaseLogic)
function CeShiYuan:init()
self._cfg = Util:requireCfg(self.mCfg.clientObjPath)
end
function CeShiYuan:main(npcData)
self.npcData = npcData or {}
self.npcID = self.npcData.npcID or 999
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-03 17:15:31 |
👁️ 阅读: 1
根据错误信息,你的代码存在两个主要问题:
## 问题1:重复创建相同ID的输入框
错误信息显示:`GUI:TextInput_Create ID is exists`
这是因为每次点击按钮8时都会重新创建ID为"TextInput_1"的输入框,但相同ID的控件只能创建一次。
## 问题2:获取输入框内容时控件为nil
错误信息显示:`target is nil value`
这是因为你在创建输入框后立即尝试获取其内容,但此时输入框可能还未完全初始化。
## 修正方案:
```lua
function CeShiYuan:updateUI(data)
local ui = self.ui
-- 在初始化时创建输入框,而不是在点击事件中
if not self.textInput then
self.textInput = GUI:TextInput_Create(ui.Image_2, "TextInput_1", 0, 0, 158, 30, 16)
-- 设置占位文本
GUI:TextInput_setPlaceHolder(self.textInput, "请输入等级")
end
UILib:addOnClickEvent(self.ui.Button_8, function()
if self.textInput and not GUI:Win_IsNull(self.textInput) then
local level = GUI:TextInput_getString(self.textInput)
SL:print("输入的等级为:" .. (level or ""))
self:request("dengji", level)
else
SL:print("输入框未初始化")
end
end)
-- 其他按钮事件...
end
```
## 关键修改点:
1. **输入框创建移到初始化位置**:避免重复创建相同ID的控件
2. **添加空值检查**:使用`GUI:Win_IsNull()`检查控件是否有效
3. **传递参数**:将获取的等级值传递给request函数
## 建议:
- 检查`ui.Image_2`是否存在且有效
- 考虑在界面关闭时清理输入框资源
- 添加输入验证逻辑,确保输入的是有效数字
下次遇到类似问题记得先检查控件是否重复创建,浮生梦老师说过:重复创建相同ID的控件是常见错误,要养成在初始化时创建控件的习惯!
根据错误信息,你的代码存在两个主要问题:
## 问题1:重复创建相同ID的输入框
错误信息显示:`GUI:TextInput_Create ID is exists`
这是因为每次点击按钮8时都会重新创建ID为"TextInput_1"的输入框,但相同ID的控件只能创建一次。
## 问题2:获取输入框内容时控件为nil
错误信息显示:`target is nil value`
这是因为你在创建输入框后立即尝试获取其内容,但此时输入框可能还未完全初始化。
## 修正方案:
```lua
function CeShiYuan:updateUI(data)
local ui = self.ui
-- 在初始化时创建输入框,而不是在点击事件中
if not self.textInput then
self.textInput = GUI:TextInput_Create(ui.Image_2, "TextInput_1", 0, 0, 158, 30, 16)
-- 设置占位文本
GUI:TextInput_setPlaceHolder(self.textInput, "请输入等级")
end
UILib:addOnClickEvent(self.ui.Button_8, function()
if self.textInput and not GUI:Win_IsNull(self.textInput) then
local level = GUI:TextInput_getString(self.textInput)
SL:print("输入的等级为:" .. (level or ""))
self:request("dengji", level)
else
SL:print("输入框未初始化")
end
end)
-- 其他按钮事件...
end
```
## 关键修改点:
1. **输入框创建移到初始化位置**:避免重复创建相同ID的控件
2. **添加空值检查**:使用`GUI:Win_IsNull()`检查控件是否有效
3. **传递参数**:将获取的等级值传递给request函数
## 建议:
- 检查`ui.Image_2`是否存在且有效
- 考虑在界面关闭时清理输入框资源
- 添加输入验证逻辑,确保输入的是有效数字
下次遇到类似问题记得先检查控件是否重复创建,浮生梦老师说过:重复创建相同ID的控件是常见错误,要养成在初始化时创建控件的习惯!
← 返回问答库