|
|
-
- UITabBarView = UITabBarView or BaseClass(BaseComponent)
- local UITabBarView = UITabBarView
- local math_abs = math.abs
-
- function UITabBarView:__init(parent_wnd,prefab_asset,layer_name,view_style,is_scroll)
- self.view_style = view_style
- self.is_scroll = is_scroll
- end
-
- --[[@
- 功能:
- 参数:
- tabbar_list 标签名字数组 ({name, ...})
- switch_callback 切换回调
- tabbar_style 标签样式,默认为1
- extra_arg_table 额外参数列表
- 返回值:
- ]]
- function UITabBarView:SetData(tabbar_list, switch_callback, tabbar_style, linebg_size_callback,extra_arg_table)
- self.curr_tabBtn_index = 0
- self.tabbar_item_list = {}
- self.linebg_size_callback = linebg_size_callback
- self.tabbar_list = tabbar_list
- self.switch_callback = switch_callback
- self.tabbar_style = tabbar_style
- self.extra_arg_table = extra_arg_table
- self.parms = UITabButton.Style[self.tabbar_style or 1] or UITabButton.Style[1]
- self:CreateGameObject(UIType.Image3, "tab_line_bg")
- end
-
- function UITabBarView:LoadSuccess()
- self.line_bg = self.gameObject:GetComponent("Image")
- self:LoadTabBarPrefab()
- self:UpdateLineHeight()
- end
-
- function UITabBarView:UpdateLineHeight( )
- self.gameObject.transform.anchorMin = Vector2(0.5, 1)
- self.gameObject.transform.anchorMax = Vector2(0.5, 1)
- self.gameObject.transform.pivot = Vector2(0.5, 1)
- local len = #self.tabbar_list
- local height = math_abs(self.parms.offsetY) + len * self.parms.spacing + 30
- -- SetAnchoredPosition(self.gameObject.transform, 0,0)--0.5,1的轴点的local不准确 还是用anchored
- if self.linebg_size_callback then
- new_height = height > 580 and 580 or height
- self.linebg_size_callback(self.parms.line_width,new_height,height)
- else
- SetLocalPositionX(self.gameObject.transform, self.parms.line_offsetX)
- self.gameObject.transform.sizeDelta = Vector2(self.parms.line_width, height)
- end
- end
-
- function UITabBarView:LoadTabBarPrefab()
- local vo = nil
- local item = nil
- local click_callback = function(index)
- self:SetTabBarIndex(index)
- end
-
- local item_len = #self.tabbar_list
- for i = 1,#self.tabbar_list do
- vo = self.tabbar_list[i]
- item = self.tabbar_item_list[i]
- if item == nil then
- item = UITabButton.New(self.parent_transform, nil, self.layer_name , self.view_style, self.tabbar_style, self.is_scroll)
- self.tabbar_item_list[i] = item
- end
- item:SetData(i, vo, click_callback, item_len, self.extra_arg_table)
- end
-
- for i=#self.tabbar_list + 1,#self.tabbar_item_list do
- self.tabbar_item_list[i]:SetVisible(false)
- end
-
- --延迟等所有的页签设置完再合批
- -- local function on_delay( )
- -- self:DoBatch()
- -- end
- -- setTimeout(on_delay, 0.5)
- end
-
- function UITabBarView:DoBatch()
- -- if self.tabbar_style == 2 then
- -- do return end
- -- end
- if IsNull(self.parent_transform) then
- return
- end
- if not self.batch_cont then
- self.batch_cont = UiFactory.createChild(self.parent_transform, UIType.EmptyObject, "batch_cont")
- end
- if not self.batch_cont then return end
- for k,v in pairs(self.tabbar_item_list) do
- v:DoBatch(self.batch_cont.transform)
- end
- for k,v in pairs(self.tabbar_item_list) do
- if v.text_transform then
- v.text_transform:SetAsLastSibling()
- end
- end
- self.batch_cont.transform:SetAsLastSibling()
- end
-
-
- function UITabBarView:SetTabBarIndex(index,is_force,ignore_call_back)
- if self.curr_tabBtn_index == index and not is_force then
- return
- end
- local tab_btn
- for k,v in pairs(self.tabbar_item_list) do
- if v.tab_id == self.curr_tabBtn_index then
- tab_btn = v
- end
- end
-
- if tab_btn then
- tab_btn:SetSelect(false)
- end
- self.curr_tabBtn_index = index
- local tab_btn
- local pos_count = 0
- for k,v in pairsByKeys(self.tabbar_item_list) do
- pos_count = pos_count + 1
- if v.tab_id == self.curr_tabBtn_index then
- tab_btn = v
- break
- end
- end
- if tab_btn then
- tab_btn:SetSelect(true)
- end
-
- if self.gameObject then
- self.gameObject.transform:SetAsFirstSibling()
- end
-
- if not ignore_call_back and self.switch_callback then
- if not self.first_open_loaded and self.view_style == UITabWindow.SizeSmall then--防止页签过多 一开始看不到页签
- self.first_open_loaded = true
- local max_num = #self.tabbar_item_list
- if pos_count <= 6 then
- --前六个
- SetAnchoredPositionY(self.parent_transform, -48)
- else
- local show_left_pos = (pos_count-6)
- if pos_count == max_num then
- --最后一个
- show_left_pos = (pos_count-1)
- end
- show_left_pos = (show_left_pos+6) > max_num and (max_num-6) or show_left_pos
- SetAnchoredPositionY(self.parent_transform,show_left_pos * (self.parms.spacing+30))
- end
- end
- self.switch_callback(index)
- end
- end
-
- function UITabBarView:ClickTabItemHandler( id )
- if self.curr_tabBtn_index == id then return end
- local tab_btn
- for k,v in pairs(self.tabbar_item_list) do
- if v.tab_id == self.curr_tabBtn_index then
- tab_btn = v
- end
- end
-
- if tab_btn and tab_btn.transform then
- tab_btn:SetSelect(false)
- end
- self.curr_tabBtn_index = id
- item = self:GetTabItem(id)
- if item ~= nil then
- item:SetSelected(true)
- end
-
- local tab_btn
- for k,v in pairs(self.tabbar_item_list) do
- if v.tab_id == self.curr_tabBtn_index then
- tab_btn = v
- end
- end
- if tab_btn and tab_btn.transform then
- -- print("HWR:UITabbarView [97]self.curr_tabBtn_index:,index ",self.curr_tabBtn_index,index)
- tab_btn:SetSelect(true)
- end
-
- if self.gameObject then
- self.gameObject.transform:SetAsFirstSibling()
- end
- end
-
- function UITabBarView:GetCurrentSelectIndex()
- return self.curr_tabBtn_index
- end
-
- function UITabBarView:ShowRedPoint(index,bool)
- for k,v in pairs(self.tabbar_item_list) do
- if index == v.tab_id then
- v:ShowRedPoint(bool)
- break
- end
- end
- -- local tab_btn = self.tabbar_item_list[index]
- -- if tab_btn then
- -- tab_btn:ShowRedPoint(bool)
- -- end
- end
-
- function UITabBarView:ShowRedPointWithNum(index, num, force_show)
- for k,v in pairs(self.tabbar_item_list) do
- if index == v.tab_id then
- v:ShowRedPointWithNum(num, force_show)
- break
- end
- end
- end
-
- function UITabBarView:SetSpeacialImg(index, state)
- for k,v in pairs(self.tabbar_item_list) do
- if index == v.tab_id then
- v:SetSpeacialImg(state)
- break
- end
- end
- end
-
- function UITabBarView:SetTextSize(font_size)
- for k,v in pairs(self.tabbar_item_list) do
- v:SetTextSize(font_size)
- end
- end
-
- function UITabBarView:GetTabbarBtn( index )
- local tab_btn = self.tabbar_item_list[index]
- return tab_btn
- end
-
- function UITabBarView:__delete()
- self.curr_tabBtn_index = 0
-
- for i,item in pairs(self.tabbar_item_list) do
- item:DeleteMe()
- end
- self.tabbar_item_list = {}
- end
-
- function UITabBarView:RefeshTabBar( )
- self:LoadTabBarPrefab()
- end
-
- function UITabBarView:RefreshTabData( tabbar_list, switch_callback, tabbar_style )
- self.tabbar_list = tabbar_list or self.tabbar_list
- self.switch_callback = switch_callback or self.switch_callback
- self.tabbar_style = tabbar_style
- self.parms = UITabButton.Style[self.tabbar_style or 1] or UITabButton.Style[1]
- local vo = nil
- local item = nil
- local click_callback = function(index)
- self:SetTabBarIndex(index)
- end
-
- for k,v in pairs(self.tabbar_item_list) do
- v:SetVisible(false)
- -- 重置tab_id,避免隐藏掉的页签按钮跟某个存在的页签按钮id相同导致不能正常点亮
- v.tab_id = -1
- end
-
- local item_len = #self.tabbar_list
- for i = 1,#self.tabbar_list do
- vo = self.tabbar_list[i]
- item = self.tabbar_item_list[i]
- if item == nil then
- item = UITabButton.New(self.parent_transform, nil, self.layer_name , self.view_style, self.tabbar_style, self.is_scroll)
- self.tabbar_item_list[i] = item
- end
- item:SetVisible(true)
- item:SetData(i, vo, click_callback, item_len)
- end
-
- self:UpdateLineHeight()
- self:DoBatch()
- end
-
|