|
--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
|