--[[ 横向Bar 示例: self.tabBar = UIHorTabBar.New(self.tabCon) self.tabBar:SetData({"按钮1","按钮2"}, call_back) self.tabBar:SetSize(180,60) self.tabBar:SetSelectTab(1) ]] UIHorTabBar = UIHorTabBar or BaseClass(BaseComponent) function UIHorTabBar:__init(handle_wnd) self:CreateGameObject(UIType.UIHorTabBar) self.item_list = {} end --[[ data = {"标签1","标签2","标签3"} ]] function UIHorTabBar:SetData( data, call_back ) self.data = data self.call_back = call_back local call_back = function ( index ) self:SetSelectTab(index) if self.call_back then self.call_back(index) end end for i,v in ipairs(data) do local item = self.item_list[i] if not item then item = UIHorTabBtn.New(self.ScrollViewCon, call_back) self.item_list[i] = item end item:SetVisible(true) item:SetText(i, v) end self:BoolCanClick(true) for i=#data+1, #self.item_list do self.item_list[i]:SetVisible(false) end end function UIHorTabBar:BoolCanClick(state) self.can_click_state = state for k,v in pairs(self.item_list) do v:SetCanClick(self.can_click_state) end end function UIHorTabBar:ShowItemRedDot( index, bool ) if self.item_list[index] then self.item_list[index]:ShowRedDot(bool) end end function UIHorTabBar:GetSize( ) local count = 0 for k,v in pairs(self.item_list) do if v:GetVisible() then count = count + 1 end end return count end function UIHorTabBar:GetTotalSize( ) local count = 0 for k,v in pairs(self.item_list) do count = count + 1 end return count end function UIHorTabBar:SetSelectTab( index ) self.cur_index = index if self.item_list[self.last_index] then self.item_list[self.last_index]:SetSelected(false) end if self.item_list[self.cur_index] then self.item_list[self.cur_index]:SetSelected(true) end self.last_index = self.cur_index end function UIHorTabBar:SetItemVisible( index, bool ) if self.item_list[index] then self.item_list[index]:SetVisible(bool) end end function UIHorTabBar:GetItemVisible( index ) if self.item_list[index] then return self.item_list[index]:GetVisible() end end function UIHorTabBar:SetSize( w, h ) self.grid_layout.cellSize = Vector2(w, h) end function UIHorTabBar:SetScrollConPos(x, y) local max_width = GetSizeDeltaX(self.ScrollViewCon) if max_width > 0 then if x > 0 then x = 0 else x = math.max(x,-max_width) end self.ScrollViewCon.transform.localPosition = Vector2(x, y) else self.con_x = x self.con_y = y local function delay_method( ) self:SetScrollConPos(self.con_x,self.con_y) end self.delay_time = self.delay_time or setTimeout(delay_method, 0.01) end end function UIHorTabBar:LoadSuccess() self.ScrollView = self:GetChild("ScrollView") self.ScrollViewViewport = self:GetChild("ScrollView/Viewport") self.ScrollViewCon = self:GetChild("ScrollView/Viewport/Content") self.group = self.gameObject:GetComponent("ToggleGroup") self.scroll_view_rect = self.ScrollView:GetComponent("ScrollRect") self.scroll_view_rect.horizontal = true self.scroll_view_rect.vertical = false self.grid_layout = self.ScrollViewCon:GetComponent("GridLayoutGroup") self.transform.anchoredPosition = Vector2.zero self.transform.sizeDelta = Vector2(0, 116) self:InitEvent() end function UIHorTabBar:SetHorizontal( bool ) self.scroll_view_rect.horizontal = bool end function UIHorTabBar:SetBtnRes( asset, res1, res2 ) for k,v in pairs(self.item_list) do v:SetBtnRes(asset, res1, res2) end end function UIHorTabBar:SetBtnLabelColor(color1,color2) for k,v in pairs(self.item_list) do v:SetBtnLabelColor(color1,color2) end end function UIHorTabBar:SetSpacing( w, h ) self.grid_layout.spacing = Vector2(w, h) end function UIHorTabBar:InitEvent() end function UIHorTabBar:GetItemByIndex(index) local item = self.item_list[index] if not item then return end return item end function UIHorTabBar:__delete( ) for k,v in pairs(self.item_list) do v:DeleteMe() end self.item_list = {} end