PopupComponent = PopupComponent or BaseClass(BaseComponent) function PopupComponent:__init(parent,layout_file,default_text,popup_list,call_back) self.show_list = false self:InitData(layout_file,default_text,popup_list,call_back) self:CreateGameObject(UIType.PopupComponent) end function PopupComponent:InitData(layout_file,default_text,popup_list,call_back) self.popup_item_list = {} self.layout_file = layout_file self.default_text = default_text or "" self.popup_list = popup_list or {} self.call_back = call_back end function PopupComponent:LoadSuccess() self.item_parent = self:GetChild("Mask/Parent/ItemParent") self.popup_parent = self:GetChild("Mask/Parent") self.popup_bg = self:GetChild("Mask/Parent/Bg") self.hideListBtn = self:GetChild("HideListBtn").gameObject self.arrow = self:GetChild("PopupBtn/Arrow") self.popup_btn = self:GetChild("PopupBtn").gameObject self.popup_btn_txt = self:GetChild("PopupBtn/Value"):GetComponent("Text") self:InitEvent() self:LayoutUI() end --在父窗口调用 function PopupComponent:__delete() if self.select_item_id then GlobalEventSystem:UnBind(self.select_item_id) self.select_item_id = nil end for i,item in pairs(self.popup_item_list) do item:DeleteMe() end self.popup_item_list = {} end function PopupComponent:LayoutUI() self.popup_btn_txt.text = self.default_text self:SetPopupItemList() end function PopupComponent:PopupBtnClick() self.show_list = not self.show_list if self.show_list then self:ShowPopupList() else self:HidePopupList() end end function PopupComponent:InitEvent() local function onBtnClickHandler(target) if target == self.popup_btn then self:PopupBtnClick() elseif target == self.hideListBtn then self:HidePopupList() end end AddClickEvent(self.popup_btn, onBtnClickHandler,LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.hideListBtn, onBtnClickHandler,LuaSoundManager.SOUND_UI.SWITCH) local function onSelectItem(layout_file,data) if self.layout_file == layout_file then self:SetPopupBtnText(data.content) self:HidePopupList() end end self.select_item_id = GlobalEventSystem:Bind(EventName.SELECT_POPUP_LIST_ITEM,onSelectItem) end function PopupComponent:SetPopupBtnText(str) self.popup_btn_txt.text = str end function PopupComponent:ShowPopupList() if self.is_moving then return end self.show_list = true self.hideListBtn:SetActive(true) self.arrow.localRotation = Quaternion.Euler(0,0,90) local sizeDelta = self.popup_bg.sizeDelta self.popup_parent.localPosition = Vector3(0,sizeDelta.y,0) self.popup_parent.gameObject:SetActive(true) local function onCompleted() self.is_moving = false end TweenLite.to(self, self.popup_parent,TweenLite.UiAnimationType.POSY,0,0.1,onCompleted) end function PopupComponent:HidePopupList() if self.is_moving then return end self.show_list = false self.hideListBtn:SetActive(false) self.arrow.localRotation = Quaternion.Euler(0,0,270) local function onCompleted() self.is_moving = false self.popup_parent.gameObject:SetActive(false) end local sizeDelta = self.popup_bg.sizeDelta TweenLite.to(self, self.popup_parent,TweenLite.UiAnimationType.POSY,sizeDelta.y,0.1,onCompleted) end function PopupComponent:SetPopupItemList() local popup_list = self.popup_list local len = #popup_list for i,v in ipairs(popup_list) do item = self.popup_item_list[i] if item == nil then item = PopupSelectItem.New(self.item_parent) table.insert(self.popup_item_list,item) end item:SetVisible(true) item:SetData(i,self.layout_file,v,self.call_back) end self.popup_bg.sizeDelta = Vector2(152,len*50 + 8) for i=#popup_list + 1,#self.popup_item_list do self.popup_item_list[i]:SetVisible(false) end end