------------------------------------------------ --作者: 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;