Combox = Combox or BaseClass(BaseComponent) local Combox = Combox function Combox:__init(parent,data,callback,width,height,red_data,prefab_data,layer_name) self.data = data or {} self.prefab_data = prefab_data or {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", ComboxView_Offer_Y = 100, index = 1} self.callback = callback self.width = width or 142 self.height = height or 32 self.index = self.prefab_data.index or 1 self.layer_name = "Top"--layer_name if self.prefab_data and self.prefab_data.Combox == "Combox" then--不同的类型在这里加判断即可 self:CreateGameObject(UIType.Combox) else self:CreateGameObject(UIType.Combox) end self.red_data = red_data or {} end function Combox:LoadSuccess() local nodes = { "img_bg/img_up:obj","img_bg","img_bg/img_down:obj","img_bg/img_red:obj","show_text:tmp", } self:GetChildren(nodes) self.is_loaded = true self.img_bg.sizeDelta = Vector2(self.width,self.height) self.transform.sizeDelta = Vector2(self.width,self.height) self.show_text_tmp.text = self.data[self.index] or "" -- self:SetSelectIndex(self.index) self:RefreshRedData() self:AddEvent() end function Combox:AddEvent() local function callback(index) self:SetSelectIndex(index) end local function close_callback() if self._use_delete_method then return end self.img_up_obj:SetActive(false) self.img_down_obj:SetActive(true) self.comboxView = nil --已经销毁了,直接释放引用 end local function onClick() self.img_up_obj:SetActive(true) self.img_down_obj:SetActive(false) if not self.comboxView then self.comboxView = ComboxView.New(nil,self.prefab_data,self.layer_name) end self.comboxView:SetSize(self.width,self.height) self.comboxView:Open(self.data,callback,close_callback,self.transform.position,self.red_data,self.source_type) end AddClickEvent(self.gameObject,onClick) end function Combox:SetSelectIndex(index,tag) self.index = index or self.index if self.is_loaded then self.show_text_tmp.text = self.data[index] or "" end if self.callback and not self.just_set_select then self.callback(self.index,tag) end self.just_set_select = false end function Combox:SetData(data) end --just_set_select 表示只选中item,不执行回调 function Combox:ResetData(data,index,callback,width,height,red_data,just_set_select, prefab_data) self.data = data or {} self.index = index or 1 self.callback = callback or self.callback self.just_set_select = just_set_select self.prefab_data = prefab_data self.red_data = red_data or {} self:SetSelectIndex(self.index) self:RefreshRedData() if width or height then self.width = width or self.width or 142 self.height = height or self.height or 32 self:SetSize() end end function Combox:RefreshRedData( red_data ) self.red_data = red_data or {} if self.is_loaded and self.img_red_obj and self.img_red_obj then local result = false for k,v in pairs(self.red_data) do if v == true then result = true break end end self.img_red_obj:SetActive(result) end end function Combox:SetSize( ) self.img_bg.sizeDelta = Vector2(self.width,self.height) self.transform.sizeDelta = Vector2(self.width,self.height) end function Combox:__delete() if self.comboxView then self.comboxView:Close() self.comboxView = nil end end