--tabbar按钮(单个按钮) UIVerTabBtn = UIVerTabBtn or BaseClass(BaseComponent) local UIVerTabBtn = UIVerTabBtn UIVerTabBtn.BTN_HEIGHT = 50 --tab按钮的高度,不包括下一级tab按钮的容器高度 UIVerTabBtn.SUB_CON_WIDTH = 171 --下一级tab按钮的容器宽度 UIVerTabBtn.TYPE = { normal = 1, designation = 2, } UIVerTabBtn.Parms = { [1] = { BTN_HEIGHT = 56, BTN_WIDTH = 186, BTN_Y_SPACE = 10, SUB_CON_WIDTH = 186, SUB_CON_HEIGHT = 48, SUB_BTN_Y_SPACE = 2, SubConPosOffset = {5, -20}, normalsource = "ui_tab_bg", selectsource = "ui_tab_bg_select2", abname = "uicomponent_asset", -- text_color_nor = Color(1,1,1,1), -- text_color_sel = Color(1,1,1,1), -- sub_btn_text_color_nor = Color(1,1,1,1), -- sub_btn_text_color_sel = Color(1,1,1,1), need_newsouce = false,--如果是false 就不需要填后面的参数了 need_show_arrow = true,--是否显示上下箭头 }, -- [2] = { -- BTN_HEIGHT = 51, -- BTN_WIDTH = 206, -- BTN_Y_SPACE = 8, -- SUB_CON_WIDTH = 210, -- SUB_CON_HEIGHT = 68, -- SUB_BTN_Y_SPACE = 0, -- SubConPosOffset = {3, -20}, -- normalsource = "design_blue", -- selectsource = "design_orange", -- abname = "designation_asset", -- need_newsouce = true, -- sub_normal = "design_sub_blue", -- sub_select = "design_sub_orange", -- subabname = "designation_asset", -- text_color_nor = Color(255/255,255/255,255/255,1), -- text_color_sel = Color(155/255,87/255,47/255,1), -- }, } -- is_btn_need_select_img:大类按钮是否需要设置选中的背景图 function UIVerTabBtn:__init(parent, call_back, desc, tabbar,type_id,is_btn_need_select_img) self.tabbar = tabbar self.sub_btn_list = {} self.tab_data = nil self.index = 1 self.call_back = nil self.type_id = type_id or 1 self.is_btn_need_select_img = is_btn_need_select_img or false self.style_data = UIVerTabBtn.Parms[self.type_id] self.show = false --是否展开 self.select_anything = false --是否可以在有子类的时候选中大类 self.new_source = false self:CreateGameObject(UIType.UIVerTabBtn) self:InitData(call_back, desc) end function UIVerTabBtn:__delete() self:UnBindEvent() end function UIVerTabBtn:UnBindEvent() for i,v in ipairs(self.sub_btn_list) do v:DeleteMe() v = nil end self.sub_btn_list = {} if self.event_id then GlobalEventSystem:UnBind(self.event_id) self.event_id = nil end end function UIVerTabBtn:InitData(call_back, text) self.call_back = call_back self.btnText.text = text end function UIVerTabBtn:LoadSuccess() self.nodes = { "tab/normalText:tmp:obj", } self:GetChildren(self.nodes) self.btnText = self:GetChild("tab/Text"):GetComponent("TextMeshProUGUI") self.btnText_obj = self:GetChild("tab/Text").gameObject self.icon = self:GetChild("tab/icon"):GetComponent("Image") self.icon_tran = self:GetChild("tab/icon") self.icon_pos = self.icon_tran.localPosition self.imgSelect = self:GetChild("tab/selectBg").gameObject self.imgSelect_img = self:GetChild("tab/selectBg"):GetComponent("Image") self.iconObj = self:GetChild("tab/icon").gameObject self.addBtn = self:GetChild("subCon").gameObject self.tab = self:GetChild("tab").gameObject self.tab_image = self:GetChild("tab"):GetComponent("Image") self.tab_con = self:GetChild("tab") self.subCon = self:GetChild("subCon") self.img = self:GetChild("tab/img").gameObject self.img:SetActive(false) self.dot = self:GetChild("tab/dot").gameObject self.dot:SetActive(false) if self.is_btn_need_select_img then lua_resM:setImageSprite(self,self.imgSelect_img,"uiComponent_asset","ui_subtab_selected") else lua_resM:setImageSprite(self,self.imgSelect_img,"uiComponent_asset","com_empty") end self:InitEvent() end function UIVerTabBtn:InitEvent() local select_fun = function (tabbar, parent_idnex, sub_index) if self.tabbar == tabbar then if self.index == parent_idnex then self:SetSelectSubIndex(parent_idnex, sub_index) else self:SetSelectSubIndex(0, 0) end end end self.event_id = GlobalEventSystem:Bind(EventName.SUB_TAB_BTN_BE_SELECTED, select_fun) end function UIVerTabBtn:SetSelectMode(index,sub_index,force_show, quick_select) self.show = not self.show if force_show then self.show = true end if self.show and index then lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_minus",true) lua_resM:setImageSprite(self,self.tab_image,UIVerTabBtn.Parms[self.type_id].abname,UIVerTabBtn.Parms[self.type_id].selectsource) -- if self.new_source then -- lua_resM:setImageSprite(self, self.tab_image, "designation_asset", "design_orange") --self.btnText.color = UIVerTabBtn.Parms[self.type_id].text_color_sel -- end -- self.icon_tran.localPosition = Vector3(self.icon_pos.x, self.icon_pos.y - 7,0) self:ShowSubBtnVisible(true) if sub_index then -- self:SetSelectSubIndex(index, sub_index) GlobalEventSystem:Fire(EventName.SUB_TAB_BTN_BE_SELECTED, self.tabbar, index, sub_index) elseif quick_select then local select_index if self.sub_red_list and #self.sub_red_list > 0 then select_index = self.sub_red_list[1] else select_index = self.sub_btn_list[1] and self.sub_btn_list[1].sub_index end if select_index then -- self:SetSelectSubIndex(index, select_index) GlobalEventSystem:Fire(EventName.SUB_TAB_BTN_BE_SELECTED, self.tabbar, index, select_index) end end else lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_addicon",true) lua_resM:setImageSprite(self,self.tab_image,UIVerTabBtn.Parms[self.type_id].abname,UIVerTabBtn.Parms[self.type_id].normalsource) -- if self.new_source then -- lua_resM:setImageSprite(self,self.tab_image,"designation_asset","design_blue") --self.btnText.color = UIVerTabBtn.Parms[self.type_id].text_color_nor -- end -- self.icon_tran.localPosition = Vector3(self.icon_pos.x, self.icon_pos.y,0) self:ShowSubBtnVisible(false) end end function UIVerTabBtn:RefreshBtnState(show) self.show = show if self.show then lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_minus",true) lua_resM:setImageSprite(self,self.tab_image,UIVerTabBtn.Parms[self.type_id].abname,UIVerTabBtn.Parms[self.type_id].selectsource) -- if self.new_source then -- lua_resM:setImageSprite(self,self.tab_image,"designation_asset","design_orange") --self.btnText.color = UIVerTabBtn.Parms[self.type_id].text_color_sel -- end -- self.icon_tran.localPosition = Vector3(self.icon_pos.x, self.icon_pos.y - 7,0) else lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_addicon",true) -- lua_resM:setImageSprite(self,self.tab_image,"uicomponent_asset","ui_tab_bg",true) lua_resM:setImageSprite(self,self.tab_image,UIVerTabBtn.Parms[self.type_id].abname,UIVerTabBtn.Parms[self.type_id].normalsource) -- if self.new_source then -- lua_resM:setImageSprite(self,self.tab_image,"designation_asset","design_blue") --self.btnText.color = UIVerTabBtn.Parms[self.type_id].text_color_nor -- end -- self.icon_tran.localPosition = Vector3(self.icon_pos.x, self.icon_pos.y,0) end if self.subCon and self.sub_btn_list and #self.sub_btn_list ~= 0 then self.subCon.gameObject:SetActive(show) end end --设置选中的子一级tab function UIVerTabBtn:SetSelectSubIndex(index, sub_index) for i,v in ipairs(self.sub_btn_list) do if v.parent_idnex == index and v.sub_index == sub_index then v:SetSelected(true) else v:SetSelected(false) end end end --设置tab数据 function UIVerTabBtn:SetTabDetail(data, index, call_back, select_anything) self.tab_data = data self.index = index self.call_back = call_back self.select_anything = select_anything if self.tab_data == nil or self.tab_data.main_tab == nil then return end self:SetText(self.tab_data.main_tab) if self.tab_data == nil or #self.tab_data.sub_tab == 0 then self.iconObj:SetActive(false) SetAnchoredPositionX(self.btnText.transform,-0.55) SetSizeDeltaX(self.btnText.transform,176.1) elseif self.style_data and self.style_data.need_show_arrow then self.iconObj:SetActive(true) SetAnchoredPositionX(self.btnText.transform,-7.61) SetSizeDeltaX(self.btnText.transform,161.97) end self:SetTabBtnSize() self:SetSubBtns(self.tab_data.sub_tab, self.index, call_back) end function UIVerTabBtn:SetText(str) self.btnText.text = str self.normalText_tmp.text = str end --设置下一级的按钮 function UIVerTabBtn:SetSubBtns(sub_tab_list, parent_index, call_back) for i,v in ipairs(self.sub_btn_list) do v:SetVisible(false) end for i,v in ipairs(sub_tab_list) do local sub_tab = self.sub_btn_list[i] if sub_tab == nil then sub_tab = UIVerTabSubBtn.New(self.subCon) self.sub_btn_list[i] = sub_tab end sub_tab:SetSubDeail(v, parent_index, i, call_back) sub_tab:SetVisible(true) sub_tab:SetStyleData(UIVerTabBtn.Parms[self.type_id]) local x = -5 local y = -(i - 1) * (UIVerTabBtn.Parms[self.type_id].SUB_CON_HEIGHT + (UIVerTabBtn.Parms[self.type_id].SUB_BTN_Y_SPACE or 10)) + 20 if UIVerTabBtn.Parms[self.type_id].need_newsouce then sub_tab:SetNewSource(UIVerTabBtn.Parms[self.type_id]) sub_tab:ResetSubDeail(self.tab_data.info[i]) end self.iconObj:SetActive(self.style_data and self.style_data.need_show_arrow or false) local is_text_middle = self.style_data and self.style_data.need_show_arrow or false if not is_text_middle then SetAnchoredPositionX(self.btnText.transform,-0.55) SetSizeDeltaX(self.btnText.transform,176.1) else SetAnchoredPositionX(self.btnText.transform,-7.61) SetSizeDeltaX(self.btnText.transform,161.97) end sub_tab:SetPosition(x, y) local function onBtnClickHandler(target) GlobalEventSystem:Fire(EventName.SUB_TAB_BTN_BE_SELECTED, self.tabbar, sub_tab.parent_idnex, sub_tab.sub_index) end if sub_tab.Button then AddClickEvent(sub_tab.Button, onBtnClickHandler,LuaSoundManager.SOUND_UI.SWITCH) end end self.subCon.gameObject:SetActive(false) end function UIVerTabBtn:ShowSubBtnVisible(bool) if self.subCon and self.sub_btn_list and #self.sub_btn_list ~= 0 then self.subCon.gameObject:SetActive(bool) if self.select_anything then self.call_back(self.index,0) end else self.call_back(self.index,0) end end function UIVerTabBtn:SetSubConSize(height) self.subCon.sizeDelta = Vector2(UIVerTabBtn.Parms[self.type_id].SUB_CON_WIDTH, height) end --设置大小 function UIVerTabBtn:SetTabBtnSize() if not self.type_id or not UIVerTabBtn.Parms[self.type_id] then return end -- print("Nice:UIVerTabBtn [243]222 : ") self.tab_con.sizeDelta = Vector2(UIVerTabBtn.Parms[self.type_id].BTN_WIDTH,UIVerTabBtn.Parms[self.type_id].BTN_HEIGHT) local pos_offset = UIVerTabBtn.Parms[self.type_id].SubConPosOffset if pos_offset then SetLocalPosition(self.subCon, pos_offset[1], -self.tab_con.sizeDelta.y + pos_offset[2]) end end function UIVerTabBtn:SetSelectState(b) self.normalText_obj:SetActive(not b) self.btnText_obj:SetActive(b) self.imgSelect:SetActive(b) end function UIVerTabBtn:SetImageTexture(asset_path,res_name) if asset_path and res_name then self.img:SetActive(true) lua_resM:setImageSprite(self,self.img:GetComponent("Image"),asset_path,res_name,true) else self.img:SetActive(false) end end function UIVerTabBtn:ShowRedDot(list) self.sub_red_list = list for i, v in ipairs(self.sub_btn_list) do v:ShowRedDot(false) end if not list or #list == 0 then self.dot:SetActive(false) else self.dot:SetActive(true) for i, v in pairs(list) do if self.sub_btn_list[v] then self.sub_btn_list[v]:ShowRedDot(true) end end end end function UIVerTabBtn:SetNewSource( ) self.new_source = true self.iconObj:SetActive(false) SetAnchoredPositionX(self.btnText.transform,-0.55) SetSizeDeltaX(self.btnText.transform,176.1) self:SetTabBtnSize() for i, v in ipairs(self.sub_btn_list) do v:SetNewSource() v:ResetSubDeail(self.tab_data.info[i]) end SetLocalPosition(self.subCon.transform, 1, -42, 0) end