GUI:ui_delegate(parent) 这个是怎么用的?
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-30 11:32:57 |
👁️ 阅读: 5
`GUI:ui_delegate(parent)` 是996引擎中用于获取界面控件代理对象的函数,主要用于方便地访问和操作界面中的子控件。
**函数说明:**
- **参数**:`parent` - 父窗口或控件对象
- **返回值**:返回一个table,其中包含了所有子控件的引用,可以通过控件的名称直接访问
**使用方式:**
1. **基本用法** - 获取界面中所有控件的代理:
```lua
-- 先创建父窗口
local parent = GUI:Win_Create("MyWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 加载界面文件(如果有的话)
-- GUI:LoadExport(parent, "ui/my_ui.json")
-- 获取ui代理对象
local ui = GUI:ui_delegate(parent)
-- 现在可以通过ui对象访问所有子控件
-- 假设界面中有名为"btn_test"的按钮
local myButton = ui.btn_test
if myButton then
GUI:Button_setTitleText(myButton, "点击我")
GUI:addOnClickEvent(myButton, function()
SL:Print("按钮被点击了!")
end)
end
```
2. **配合objcfg使用** - 这是更常见的使用场景:
```lua
-- 假设objcfg是一个配置表,包含了UI_PATH等信息
function MyOBJ:main(objcfg, data)
self._parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, objcfg.HIDE_MAIN, false, objcfg.VOICE, objcfg.PC_ESC)
-- 加载界面布局文件
GUI:LoadExport(self._parent, objcfg.UI_PATH)
-- 获取ui代理对象
self.ui = GUI:ui_delegate(self._parent, objcfg)
-- 现在可以通过self.ui访问界面中的所有控件
-- 例如:设置某个图片控件不可见
GUI:setVisible(self.ui.img_di, false)
-- 给按钮添加点击事件
ssrAddTouchEventListener({
widget = self.ui.Button_1,
callback = function()
self:RequestUp()
end,
scale = 0.95,
isDTouch = true,
})
end
```
3. **访问动态创建的控件**:
```lua
-- 获取ListView中的item的ui代理
local ui_item = self.ui.ListView_1:getItem(i - 1)
local imgUI = GUI:ui_delegate(ui_item)
-- 操作item中的控件
GUI:setVisible(imgUI.Image_3, false)
GUI:Button_loadTextures(imgUI.Button_1,
'res/custom/61huodong/1a.png',
'res/custom/61huodong/1.png',
'res/custom/61huodong/1.png')
```
**注意事项:**
- 这个函数通常与`GUI:LoadExport()`配合使用,先加载界面布局文件,再获取代理对象
- 通过代理对象可以方便地使用控件的原始名称进行访问,比如`self.ui.Button_1`、`self.ui.img_bg`等
- 如果控件不存在,访问时会返回nil,所以最好先做判断
- 这个函数在浮生梦老师的前端课程中是界面开发的基础操作,掌握后能大大提高开发效率
**常见应用场景:**
- 界面初始化时获取所有控件引用
- 动态更新界面元素
- 为控件绑定事件处理函数
- 批量操作界面控件
← 返回问答库