源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

221 行
6.3 KiB

--[[
@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