|
|
-
- --[[
- @description:可以自定义 二级选项卡item 样式的垂直TabBar
-
- @example:
- code:
- local test_tab_data = {
- ["_1"] = "主菜单",
- ["_1_1"] = "子菜单",
- }
- 或者
- local test_tab_data = {
- ["_1"] = {name = "主菜单", ...(自定义数据)},
- ["_1_1"] = {name = "子菜单", ...(自定义数据)},
- }
-
- local call_back = function (index, sub_index) --回调函数
-
- end
- self.verTabBar = UICusVerTabBar.New(self.scroll_content, Vector2(265, 590), item, co.TableXY(257, 75))
- self.verTabBar:SetSubOffset(co.TableXY(2, 2))
- self.verTabBar:SetPaddingTop(6)
- self.verTabBar:SetTabBars(test_tab_data, call_back)
- self.verTabBar:SetSelectTab(1, 2)
- ]]
-
- UICusVerTabBar = UICusVerTabBar or BaseClass()
-
- --[[
- sizeDelta: 菜单大小
- item: 自定义的二级选项卡item
-
- tab_btn_size: 一级选项卡的大小
- padding_top: 一级选项卡顶部内边距
- subCon_offset: 一级选项卡子内容偏移
- ]]
- function UICusVerTabBar:__init(parent_wnd, sizeDelta, item, tab_btn_size, padding_top, tab_offset, subCon_offset)
- self.parent_wnd = parent_wnd
- self.btn_list = {}
- self.item = item
- self.tab_btn_size = tab_btn_size
- self.padding_top = padding_top or 0
- self.offset = tab_offset
- self.subCon_offset = subCon_offset
- self:Load(sizeDelta)
- end
-
- function UICusVerTabBar:__delete()
- for i,v in ipairs(self.btn_list) do
- v:DeleteMe()
- v = nil
- end
- self.btn_list = {}
-
- destroy(self.scroll_view)
- end
-
- function UICusVerTabBar:Load(sizeDelta)
- self.scroll_view = UiFactory.createChild(self.parent_wnd, UIType.ScrollView, "bar_scroll")
- self.scroll_view.transform.anchorMax = Vector2(0, 1)
- self.scroll_view.transform.anchorMin = Vector2(0, 1)
- self.scroll_view.transform.pivot = Vector2(0, 1)
- self.scroll_view.transform.anchoredPosition = Vector2(0, 0)
- 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 UICusVerTabBar:InitEvent()
-
- end
-
- function UICusVerTabBar:SetTabBars(bar_list, call_back, select_anything, force_size)
- if bar_list == nil or TableSize(bar_list) == 0 then return end
-
- --先隐藏所有菜单
- for i,v in ipairs(self.btn_list) do
- v:SetVisible(false)
- end
-
- for i = 1, TableSize(bar_list) do
- local index = "_" .. i
- if not bar_list[index] then
- break
- end
-
- local tab_btn = self.btn_list[i]
- if tab_btn == nil then
- tab_btn = UICusVerTabBtn.New(self.scroll_view_content, self.item, self.tab_btn_size, self.subCon_offset)
- self.btn_list[i] = tab_btn
- end
- tab_btn:SetTabDetail(bar_list, i, call_back, select_anything, force_size)
- tab_btn:SetSubOffset(self.offset)
- tab_btn:SetVisible(true)
-
- local function onBtnClickHandler(target)
- self:SetSelectTab(tab_btn.index)
- end
- if tab_btn.tab then
- AddClickEvent(tab_btn.tab, onBtnClickHandler,2)
- end
- end
-
- self:RefreshTabPos()
- end
-
- --更新tabBar的位置
- function UICusVerTabBar:RefreshTabPos(index, sub_index)
- local gap = self.padding_top
- local btn_height
- for i,v in ipairs(self.btn_list) do
- btn_height = v.btn_height
- if v.show == true then
- local off = self.offset and (v:GetVisibleCount(true) - 1) * self.offset.y or 0
- local h = v:GetVisibleCount(true) * self.item.Height + off
- v:SetPosition(0, -gap)
- gap = gap + v.btn_height + h
- else
- v:SetPosition(0, -gap)
- gap = gap + v.btn_height
- end
- end
- self.scroll_view_content.sizeDelta = Vector2(self.scroll_view_content.sizeDelta.x, gap) -- +40?
- if self.index and sub_index and sub_index >= 5 then
- local all_height = self.item.Height * 4 + (self.index - 1) * btn_height
- self.scroll_view_content.localPosition = Vector3(0,all_height,0)
- else
- self.scroll_view_content.localPosition = Vector3(0,0,0)
- end
- end
-
- --设置选中的选项卡
- --[[function UICusVerTabBar:SetSelectTab(index, sub_index,force_show)
- self.sub_index = sub_index
- self.index = index
- for i,v in ipairs(self.btn_list) do
- -- if v.index and v.index == index then
- v:SetSelectMode(index, sub_index, force_show)
- -- end
- end
- GlobalEventSystem:Fire(EventName.TAB_BAR_BE_CLICK)
- self:RefreshTabPos()
- end--]]
- --设置选中的选项卡
- function UICusVerTabBar:SetSelectTab(index, sub_index,force_show)
- for i,v in ipairs(self.btn_list) do
- 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)
- break
- end
- end
- self:RefreshTabPos(index, sub_index)
- end
-
- --取消所有的选中项
- function UICusVerTabBar: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) * ComposeTabSubBtn.Height)
- else
- self.scroll_view_content.localPosition = Vector2(self.scroll_view_content.localPosition.x, 0)
- end
- end
-
- function UICusVerTabBar:SetScrollViewSize(width,heigh)
- self.scroll_view.transform.sizeDelta = Vector2(width,heigh)
- end
-
- function UICusVerTabBar: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 UICusVerTabBar:GetTabBtnShowState(index)
- for i,v in ipairs(self.btn_list) do
- if v.index == index then
- return v.show
- end
- end
- end
-
-
- --在回调函数中调用该函数,刷新选中状态
- function UICusVerTabBar: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 UICusVerTabBar:ShowRedDot(index, index_list)
- if self.btn_list[index] and self.btn_list[index].ShowRedDot then
- self.btn_list[index]:ShowRedDot(index_list)
- end
- end
|