源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

284 lines
7.5 KiB

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