|
|
-
- --[[
- @description:垂直TabBar
-
- @example:
- code:
- local test_tab_data = { --选项卡配置, main_tab 代表一级选项卡,sub_tab 代表二级选项卡
- [1] = {main_tab = "主Tab1", sub_tab = {"子Tab1", "子Tab2", "子Tab3", "子Tab4"}},
- [2] = {main_tab = "主Tab2", sub_tab = {"子Tab1", "子Tab2", "子Tab3", "子Tab4"}},
- [3] = {main_tab = "主Tab3", sub_tab = {"子Tab1", "子Tab2", "子Tab3", "子Tab4"}},
- }
- local call_back = function (index, sub_index) --回调函数
-
- end
- self.verTabBar = UIVerTabBar.New(self.scroll_content)
-
- self.verTabBar:SetTabBars(test_tab_data, call_back)
- self.verTabBar:SetSelectTab(1, 2)
- ]]
-
- UIVerTabBar = UIVerTabBar or BaseClass()
- local UIVerTabBar = UIVerTabBar
- function UIVerTabBar:__init(parent_wnd, sizeDelta, quick_select,type_id)
- self.parent_wnd = parent_wnd
- self.btn_list = {}
- self.cur_sub_index = nil
- self.new_source = false
- self.type_mode = type_id or 1
- if quick_select == nil then
- quick_select = true
- end
- self.quick_select = quick_select
- if not sizeDelta and parent_wnd then
- sizeDelta = {}
- sizeDelta.x, sizeDelta.y = GetSizeDeltaXY(parent_wnd)
- end
- self:Load(sizeDelta)
- end
-
- function UIVerTabBar:__delete()
- self:DestroyBtnList()
- end
-
- function UIVerTabBar:DestroyBtnList()
- for i,v in ipairs(self.btn_list) do
- v:UnBindEvent()
- v:DeleteMe()
- v = nil
- end
- self.btn_list = {}
- end
-
- function UIVerTabBar:Load(sizeDelta)
- self.scroll_view = UiFactory.createChild(self.parent_wnd, UIType.ScrollView, "bar_scroll")
- self.scroll_view.transform.sizeDelta = sizeDelta and sizeDelta or Vector2(202, 561)
- self.scroll_view_content = self.scroll_view.transform:Find("Viewport/Content")
- self.scroll_view_viewport = self.scroll_view.transform:Find("Viewport")
- self:InitEvent()
- end
-
- function UIVerTabBar:InitEvent()
-
- end
-
- --设置选项卡数据 is_btn_need_select_img:大类按钮是否需要设置选中的背景图
- function UIVerTabBar:SetTabBars(bar_list, call_back, select_anything, is_btn_need_select_img)
- if bar_list == nil or call_back == nil then return end
- for i,v in ipairs(self.btn_list) do
- v:SetVisible(false)
- end
- -- print("Nice:UIVerTabBar [67] self.new_source: ",self.new_source)
- for i,v in ipairs(bar_list) do
- local tab_btn = self.btn_list[i]
- if tab_btn == nil then
- tab_btn = UIVerTabBtn.New(self.scroll_view_content, nil, nil, self,self.type_mode,is_btn_need_select_img)
- self.btn_list[i] = tab_btn
- end
- --print("Nice:UIVerTabBar [74] self.new_source: ",self.new_source)
- tab_btn:SetTabDetail(v, i, call_back, select_anything)
- tab_btn:SetVisible(true)
- local x = 0
- local y = -(i - 1) * UIVerTabBtn.Parms[self.type_mode].BTN_HEIGHT -5
- -- local y = -i * UIVerTabBtn.Parms[self.type_mode].BTN_HEIGHT -5
- tab_btn:SetPosition(x, y)
-
- local function onBtnClickHandler(target)
- self:SetSelectTab(tab_btn.index,tab_btn.sub_index,self.force_show)
- end
- if tab_btn.tab then
- AddClickEvent(tab_btn.tab, onBtnClickHandler,2)
- end
- end
- end
-
- --设置选中的选项卡
- function UIVerTabBar:SetSelectTab(index,sub_index,force_show)
- self.force_show = force_show
- for i,v in ipairs(self.btn_list) do
- -- if self.new_source then
- -- v:SetNewSource()
- -- end
- if v.index and v.index == index then
- if not v.show then
- self:CancelSetSelectTab(index)
- end
- v:SetSelectMode(index, sub_index, force_show, self.quick_select)
- end
- end
- self:RefreshTabPos()
- end
-
- --取消所有的选中项
- function UIVerTabBar:CancelSetSelectTab(index)
- for i,v in ipairs(self.btn_list) do
- v:RefreshBtnState(false)
- v:SetSelectSubIndex(0, 0)
- end
- self:RefreshTabPos()
-
- if index and index * UIVerTabSubBtn.Height > self.scroll_view.transform.sizeDelta.y / 2 then
- self.scroll_view_content.localPosition = Vector2(self.scroll_view_content.localPosition.x, (index - 1) * UIVerTabSubBtn.Height)
- else
- self.scroll_view_content.localPosition = Vector2(self.scroll_view_content.localPosition.x, 0)
- end
- end
-
- --更新tabBar的位置
- function UIVerTabBar:RefreshTabPos()
- local gap = 2
- for i,v in ipairs(self.btn_list) do
- if v.show == true then
- local h = #v.sub_btn_list * (UIVerTabBtn.Parms[self.type_mode].SUB_CON_HEIGHT+(UIVerTabBtn.Parms[self.type_mode].SUB_BTN_Y_SPACE or 10))
- v:SetPosition(0, -gap)
- v:SetSubConSize(h)
- if h <= 10 then
- h = UIVerTabBtn.Parms[self.type_mode].BTN_Y_SPACE
- end
- gap = gap + UIVerTabBtn.Parms[self.type_mode].BTN_HEIGHT + h
- else
- v:SetPosition(0, -gap)
- gap = gap + UIVerTabBtn.Parms[self.type_mode].BTN_HEIGHT + UIVerTabBtn.Parms[self.type_mode].BTN_Y_SPACE
- end
- end
- self.scroll_view_content.sizeDelta = Vector2(202, gap)
- -- print("UIVerTabBar:RefreshTabPos()",(gap + 40))
- end
-
- function UIVerTabBar:SetScrollViewSize(width,heigh)
- self.scroll_view.transform.sizeDelta = Vector2(width,heigh)
- end
-
- function UIVerTabBar:RefreshTabBtnState(index)
- for i,v in ipairs(self.btn_list) do
- if v.index == index then
- v:RefreshBtnState(v.show)
- end
- end
-
- self:RefreshTabPos()
- end
-
- function UIVerTabBar:GetTabBtnShowState(index)
- for i,v in ipairs(self.btn_list) do
- if v.index == index then
- return v.show
- end
- end
- end
-
- function UIVerTabBar:SetNewSource( )
- self.new_source = true
- UIVerTabBtn.BTN_HEIGHT = 50
- end
-
- --在回调函数中调用该函数,刷新选中状态
- function UIVerTabBar:UpdateSelectState(index, sub_index)
- for i,v in ipairs(self.btn_list) do
- v:SetSelectState(false)
- for key,value in ipairs(v.sub_btn_list) do
- value:SetSelectState(false)
- end
- end
-
- if sub_index == 0 then
- self.btn_list[index]:SetSelectState(true)
- else
- self.btn_list[index].sub_btn_list[sub_index]:SetSelectState(true)
- end
- end
-
- function UIVerTabBar:SetImageTexture(asset_path,res_name,index_list)
- for i,v in ipairs(self.btn_list) do
- v:SetImageTexture()
- for key,value in ipairs(v.sub_btn_list) do
- value:SetImageTexture()
- end
- end
-
- -- PrintTable(index_list)
- if asset_path and res_name then
- for k,v in pairs(index_list) do
- self.btn_list[v.main_index]:SetImageTexture(asset_path,res_name)
- if v.sub_index ~= 0 then
- self.btn_list[v.main_index].sub_btn_list[v.sub_index]:SetImageTexture(asset_path,res_name)
- end
- end
- end
- end
-
- --传入主索引和所有要显示的子索引列表,取消红点只传入主索引
- function UIVerTabBar:ShowRedDot(index, index_list)
- if self.btn_list[index] then
- self.btn_list[index]:ShowRedDot(index_list)
- end
- end
-
- function UIVerTabBar:CancelAllRedDot()
- for i, v in pairs(self.btn_list) do
- v:ShowRedDot()
- end
- end
|