--tabbar按钮(单个按钮)
|
|
NewUICusVerTabBtn = NewUICusVerTabBtn or BaseClass(BaseComponent)
|
|
|
|
-- NewUICusVerTabBtn.BTN_HEIGHT = 66 --tab按钮的高度,不包括下一级tab按钮的容器高度
|
|
-- NewUICusVerTabBtn.SUB_CON_WIDTH = 178 --下一级tab按钮的容器宽度
|
|
|
|
function NewUICusVerTabBtn:__init(parent, sub_item, size, tabbar,child_offset)
|
|
self.tabbar = tabbar
|
|
self.sub_btn_list = {}
|
|
self.tab_data = nil
|
|
self.index = 1
|
|
self.call_back = nil
|
|
self.show = false --是否展开
|
|
self.select_anything = false --是否可以在有子类的时候选中大类
|
|
self.btn_width = size and size.x or 189 --tab按钮的宽度,不包括下一级tab按钮的容器宽度
|
|
self.btn_height = size and size.y or 66 --tab按钮的高度,不包括下一级tab按钮的容器高度
|
|
self.sub_con_width = size and size.x - 16 or 178 --下一级tab按钮的容器宽度
|
|
self.sub_item = sub_item
|
|
self.child_offset = child_offset
|
|
self:CreateGameObject(UIType.UIVerTabBtn)
|
|
end
|
|
|
|
function NewUICusVerTabBtn:__delete()
|
|
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 NewUICusVerTabBtn:LoadSuccess()
|
|
self.btnText = self:GetChild("tab/Text"):GetComponent("Text")
|
|
self.btn_tran = self:GetChild("tab/Text")
|
|
self.icon = self:GetChild("tab/icon"):GetComponent("Image")
|
|
self.icon_tran = self:GetChild("tab/icon")
|
|
self.imgSelect = self:GetChild("tab/selectBg").gameObject
|
|
self.iconObj = self:GetChild("tab/icon").gameObject
|
|
self.addBtn = self:GetChild("subCon").gameObject
|
|
self.tab = self:GetChild("tab").gameObject
|
|
self.tab_img = self:GetChild("tab")
|
|
self.subCon = self:GetChild("subCon")
|
|
self.img = self:GetChild("tab/img").gameObject
|
|
self.red_dot = self:GetChild("tab/dot").gameObject
|
|
|
|
self:RedreshSize()
|
|
self:InitEvent()
|
|
end
|
|
|
|
function NewUICusVerTabBtn:InitEvent()
|
|
-- local function onBtnClickHandler(target)
|
|
-- if target == self.tab then
|
|
-- if self.call_back then
|
|
-- self.call_back(self.index,0)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- AddClickEvent(self.tab, onBtnClickHandler,2)
|
|
end
|
|
|
|
--设置tab数据
|
|
function NewUICusVerTabBtn:SetTabDetail(data, index, call_back, select_anything, force_size)
|
|
|
|
self.tab_data = data
|
|
self.index = index
|
|
self.call_back = call_back
|
|
self.select_anything = select_anything
|
|
self.force_size = force_size
|
|
if 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)
|
|
else
|
|
self.iconObj:SetActive(true)
|
|
end
|
|
|
|
self:SetSubBtns(self.tab_data.sub_tab, self.index, call_back)
|
|
end
|
|
|
|
--设置下一级的按钮
|
|
function NewUICusVerTabBtn: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 = self.sub_item.New(self.subCon)
|
|
self.sub_btn_list[i] = sub_tab
|
|
if self.force_size then
|
|
sub_tab:SetTabSubBtnSize(self.sub_con_width)
|
|
end
|
|
end
|
|
|
|
-- sub_tab:SetSubDeail(v, parent_index, i, call_back)
|
|
sub_tab:SetData(v, parent_index, i, call_back)
|
|
sub_tab:SetVisible(true)
|
|
|
|
local x = 0
|
|
local y = -(i - 1) * self.sub_item.Height
|
|
x = self.offset and self.offset.x + x or x
|
|
y = self.offset and -(i - 1) * self.offset.y + y or y
|
|
sub_tab:SetPosition(x, y)
|
|
|
|
-- local function onBtnClickHandler(target)
|
|
-- self:SetSelectSubIndex(0, 0)
|
|
-- self:SetSelectSubIndex(sub_tab.parent_idnex, sub_tab.sub_index)
|
|
-- end
|
|
-- if sub_tab.Button then
|
|
-- AddClickEvent(sub_tab.Button, onBtnClickHandler,2)
|
|
-- end
|
|
|
|
end
|
|
self.subCon.gameObject:SetActive(false)
|
|
end
|
|
|
|
--选中菜单
|
|
function NewUICusVerTabBtn:SetSelectMode(index, sub_index,force_show)
|
|
if self.index == index then
|
|
self.show = not self.show
|
|
else
|
|
self.show = false
|
|
end
|
|
-- self.show = not self.show
|
|
|
|
if force_show and self.index == index then
|
|
self.show = true
|
|
end
|
|
|
|
if self.show and index then
|
|
self.icon_tran.transform.localRotation = Quaternion.Euler(0,0,-90)
|
|
self:SetSelectState(true)
|
|
--SetRotate(self.icon_tran, 0, 0, -90)
|
|
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_minus",true)
|
|
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2,0)
|
|
self:ShowSubBtnVisible(true)
|
|
-- if sub_index then
|
|
-- self:SetSelectSubIndex(index, sub_index)
|
|
-- end
|
|
else
|
|
SetLocalRotation(self.icon_tran, 0, 0, 0)
|
|
self:SetSelectState(false)
|
|
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_addicon",true)
|
|
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2 + 7,0)
|
|
self:ShowSubBtnVisible(false)
|
|
end
|
|
end
|
|
|
|
--设置图标,隐藏sub
|
|
function NewUICusVerTabBtn:RefreshBtnState(show)
|
|
self.show = show
|
|
|
|
if self.show then
|
|
self.icon_tran.transform.localRotation = Quaternion.Euler(0,0,-90)
|
|
--SetRotate(self.icon_tran, 0, 0, -90)
|
|
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_minus",true)
|
|
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2,0)
|
|
else
|
|
SetLocalRotation(self.icon_tran, 0, 0, 0)
|
|
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_addicon",true)
|
|
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2 + 7,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 NewUICusVerTabBtn:SetSelectSubIndex(index, sub_index)
|
|
for i,v in ipairs(self.sub_btn_list) do
|
|
if v.parent_index == index and v.sub_index == sub_index then
|
|
v:SetSelected(true, true)
|
|
else
|
|
v:SetSelected(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function NewUICusVerTabBtn:SetText(str)
|
|
self.btnText.text = str
|
|
end
|
|
|
|
function NewUICusVerTabBtn: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
|
|
--if self.call_back then self.call_back(self.index,0) end
|
|
end
|
|
else
|
|
--if self.call_back then self.call_back(self.index,0) end
|
|
end
|
|
end
|
|
|
|
function NewUICusVerTabBtn:SetSubConSize(height)
|
|
-- self.subCon.sizeDelta = Vector2(NewUICusVerTabBtn.SUB_CON_WIDTH, height)
|
|
end
|
|
|
|
--设置大小
|
|
function NewUICusVerTabBtn:SetTabBtnSize()
|
|
|
|
end
|
|
|
|
function NewUICusVerTabBtn:SetSelectState(b)
|
|
self.imgSelect:SetActive(b)
|
|
if b then
|
|
self:SetSelectBg()
|
|
end
|
|
end
|
|
|
|
function NewUICusVerTabBtn:SetSelectBg()
|
|
if self.imgSelect:GetComponent("Image").sprite.name == "empty" then
|
|
lua_resM:setImageSprite(self,self.imgSelect:GetComponent("Image"),"common_asset","tyui_btn3_1")
|
|
self.imgSelect.transform.anchorMin = Vector2(0, 0)
|
|
self.imgSelect.transform.anchorMax = Vector2(1, 1)
|
|
self.imgSelect.transform.offsetMax = Vector2(0, 0)
|
|
self.imgSelect.transform.offsetMin = Vector2(0, 0)
|
|
SetAnchoredPosition(self.imgSelect.transform,0,0)
|
|
end
|
|
end
|
|
|
|
function NewUICusVerTabBtn: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)
|
|
else
|
|
self.img:SetActive(false)
|
|
end
|
|
end
|
|
|
|
|
|
function NewUICusVerTabBtn:ShowRedDot(list)
|
|
if list and #list > 0 then
|
|
table.sort(list)
|
|
end
|
|
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.red_dot:SetActive(false)
|
|
else
|
|
self.red_dot:SetActive(true)
|
|
for i, v in ipairs(list) do
|
|
if self.sub_btn_list[v] then
|
|
self.sub_btn_list[v]:ShowRedDot(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
if list[0] then
|
|
self.red_dot:SetActive(true)
|
|
end
|
|
end
|
|
|
|
|
|
function NewUICusVerTabBtn:SetSubOffset(offset)
|
|
self.offset = offset
|
|
end
|
|
|
|
--加载完但不显示的不需计算高度
|
|
function NewUICusVerTabBtn:GetVisibleCount(visible)
|
|
local count = 0
|
|
for _,v in ipairs(self.sub_btn_list) do
|
|
if v:GetVisible() == visible or not v.is_loaded then
|
|
count = count + 1
|
|
end
|
|
end
|
|
return count
|
|
end
|
|
|
|
function NewUICusVerTabBtn:RedreshSize()
|
|
self.tab_img.sizeDelta = Vector2(self.btn_width, self.btn_height)
|
|
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2 + 7,0)
|
|
SetAnchoredPosition(self.tab.transform,0,0)
|
|
if self.child_offset then
|
|
self.subCon.localPosition = Vector3(self.child_offset.x, self.child_offset.y,0)
|
|
else
|
|
self.subCon.localPosition = Vector3(self.subCon.localPosition.x, -self.btn_height,0)
|
|
end
|
|
end
|