Files
Main/Assets/GameAssets/Resources/Lua/UI/Components/UIToggleGroup.lua

93 lines
2.6 KiB
Lua
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者: gzg
--日期: 2019-04-9
--文件: UIToggleGroup.lua
--模块: UIToggleGroup
--描述: 点选开关组件的Group
--[[
GameObjectTree的形状:
--ParentNode
--Item_01
--Item_02
--Item_03
--Item_04
:Item_xx节点需要添加UIToggle组件.
]]--
------------------------------------------------
local UIToggleGroup={
--当前ToggleGroup的所有者
Owner = nil,
--当前Group所关联的Transform
Trans = nil,
--互斥性Toggle的数组
GroupID = 0,
--所有的Toggle组件
Toggles = Dictionary:New(),
--当Toggle被改变时的处理函数表
SwitchProps = nil,
--关联的ToggleGroup的数组,当前ToggleGroup被改变时,关联的TG也会被刷新
RelateToggleGroups = nil,
};
--构造对象
function UIToggleGroup:New(owner,trans,groupID,switchProps,relateGroups)
local _m = Utils.DeepCopy(self);
_m.Owner = owner;
_m.Trans = trans;
_m.GroupID = groupID;
_m.SwitchProps = switchProps;
_m.RelateToggleGroups = relateGroups;
_m:FindAllComponents();
return _m;
end
--查找所有组件
function UIToggleGroup:FindAllComponents()
local _trans = self.Trans;
for i = 0, _trans.childCount-1 do
local _c = _trans:GetChild(i);
local _toggle = UIUtils.FindToggle(_c)
if _toggle ~= nil then
_toggle.group = self.GroupID;
UIUtils.AddOnChangeEvent(_toggle,self.OnToggleChanged,self,_toggle);
local _flag = tonumber(string.sub(_c.name,-2));
self.Toggles[_toggle] = _flag;
end
end
end
--刷新当前组件
function UIToggleGroup:Refresh()
if self.Toggles then
for k,v in pairs(self.Toggles) do
local _prop = self.SwitchProps[v];
if _prop ~= nil then
k.value = _prop.Get();
end
end
end
end
--开关组件被改变时的处理
function UIToggleGroup:OnToggleChanged(toggle)
if self.SwitchProps then
local _flag = self.Toggles[toggle];
local _prop = self.SwitchProps[_flag];
if _prop ~= nil then
_prop.Set(toggle.value);
end
else
if self.Owner ~= nil and self.Owner.OnToggleChanged ~= nil then
self.Owner.OnToggleChanged(toggle);
end
end
if self.RelateToggleGroups then
for _,v in ipairs(self.RelateToggleGroups) do
v:Refresh();
end
end
end
return UIToggleGroup;