93 lines
2.6 KiB
Lua
93 lines
2.6 KiB
Lua
------------------------------------------------
|
|
--作者: 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; |