Quick中的UIButton

为便于看官实际操作和整体理解,直接放入整个类,其中包含各个按钮的创建方式及属性设置


---定义类
local TestUIButtonScene = class("TestUIButtonScene", function (  )
	return display.newScene("TestUIButtonScene")
end)


--声明图片资源,每一种按钮对应一种表
TestUIButtonScene.CHECKBOX_BUTTON_IMAGES = {
    off = "CheckBoxButtonOff.png",
    off_pressed = "CheckBoxButtonOffPressed.png",
    off_disabled = "CheckBoxButtonOffDisabled.png",
    on = "CheckBoxButtonOn.png",
    on_pressed = "CheckBoxButtonOnPressed.png",
    on_disabled = "CheckBoxButtonOnDisabled.png",
}

TestUIButtonScene.CHECKBOX_BUTTON2_IMAGES = {
    off = "CheckBoxButton2Off.png",
    on = "CheckBoxButton2On.png",
}

TestUIButtonScene.PUSH_BUTTON_IMAGES = {
    normal = "Button01.png",
    pressed = "Button01Pressed.png",
    disabled = "Button01Disabled.png",
}

TestUIButtonScene.RADIO_BUTTON_IMAGES = {
    off = "RadioButtonOff.png",
    off_pressed = "RadioButtonOffPressed.png",
    off_disabled = "RadioButtonOffDisabled.png",
    on = "RadioButtonOn.png",
    on_pressed = "RadioButtonOnPressed.png",
    on_disabled = "RadioButtonOnDisabled.png",
}

--构造函数
function TestUIButtonScene:ctor(  )

    self:createButtonGroup1()
    self:createButtonGroup2()
    self:createButtonGroup3()

end

--复选按钮
function TestUIButtonScene:createButtonGroup1(  )
    local checkBoxButton1,checkBoxButton2

    ---更新输出按钮的状态的Label
    local function updateCheckBoxButtonLabel( checkbox )
        local state = ""
        if checkbox:isButtonSelected()then
            state = "on"
        else
            state = "off"
        end
        if not checkbox:isButtonEnabled() then
            state = state .. "(disabled)"
        end
        checkbox:setButtonLabelString(string.format("state is %s", state))
    end

    --第一个按钮
    checkBoxButton1 = cc.ui.UICheckBoxButton.new(TestUIButtonScene.CHECKBOX_BUTTON_IMAGES)
        :setButtonLabel(cc.ui.UILabel.new({test = "", size = 22, color = cc.c3b(255,96,255)}))  --设置Label字体
        :setButtonLabelOffset(0, -40)--设置Label与按钮的位置
        :setButtonLabelAlignment(display.CENTER) --设置Label和按钮的对齐方式
        :onButtonStateChanged(function(event)   --每次状态更新调用此函数
            updateCheckBoxButtonLabel(event.target)
            end)
        :align(display.LEFT_CENTER, display.left + 40, display.top - 80)
        :addTo(self)
    updateCheckBoxButtonLabel(checkBoxButton1) -- 再更新一次

    --第二个按钮
    checkBoxButton2 = cc.ui.UICheckBoxButton.new(TestUIButtonScene.CHECKBOX_BUTTON_IMAGES)
        :setButtonSelected(true)
        :setButtonLabel(cc.ui.UILabel.new({text = "", size = 22, color = cc.c3b(96, 200, 96)}))
        :setButtonLabelOffset(0, -40)
        :setButtonLabelAlignment(display.CENTER)
        :onButtonStateChanged(function(event)
            updateCheckBoxButtonLabel(event.target)
        end)
        :align(display.LEFT_CENTER, display.left + 260, display.top - 80)
        :addTo(self)
    updateCheckBoxButtonLabel(checkBoxButton2)

    --PushButton
    cc.ui.UIPushButton.new(TestUIButtonScene.PUSH_BUTTON_IMAGES,{scale9 = true})
        --设置按钮大小
        :setButtonSize(240, 60)
        --设置正常状态下的label
        :setButtonLabel("normal", cc.ui.UILabel.new({
            UILabelType = 2,
            text = "This is a PushButton",
            size = 18,
        }))
        --设置按下状态的label
        :setButtonLabel("pressed", cc.ui.UILabel.new({
            UILabelType = 2,
            text = "Button Pressed",
            size = 18,
            color = cc.c3b(255, 64, 64)
        }))
        --设置禁用状态下的label
        :setButtonLabel("disabled", cc.ui.UILabel.new({
            UILabelType = 2,
            text = "Button Disabled",
            size = 18,
            color = cc.c3b(0, 0, 0)
        }))
        --设置点击事件
        :onButtonClicked(function(event)
            if math.random(0, 1) == 0 then
                checkBoxButton1:setButtonEnabled(not checkBoxButton1:isButtonEnabled())
            else
                checkBoxButton2:setButtonEnabled(not checkBoxButton2:isButtonEnabled())
            end

            local button = event.target
            button:setButtonEnabled(false)
            button:setButtonLabelString("disabled", "Button Enable after 1s")
            self:performWithDelay(function()
                button:setButtonLabelString("disabled", "Button Disabled")
                button:setButtonEnabled(true)
            end, 1.0)
        end)
        :align(display.LEFT_CENTER, display.left + 480, display.top - 80)
        :addTo(self)
end

--按钮组
function TestUIButtonScene:createButtonGroup2(  )
    --新建按钮组,排序规则为从上至下
    local group = cc.ui.UICheckBoxButtonGroup.new(display.TOP_TO_BOTTOM)
        --给按钮组添加按钮
        :addButton(cc.ui.UICheckBoxButton.new(TestUIButtonScene.RADIO_BUTTON_IMAGES)
            :setButtonLabel(cc.ui.UILabel.new({text = "option 1", color = display.COLOR_RED}))
            :setButtonLabelOffset(20, 0)
            :align(display.LEFT_CENTER))
        :addButton(cc.ui.UICheckBoxButton.new(TestUIButtonScene.RADIO_BUTTON_IMAGES)
            :setButtonLabel(cc.ui.UILabel.new({text = "option 2", color = display.COLOR_RED}))
            :setButtonLabelOffset(20, 0)
            :align(display.LEFT_CENTER))
        :addButton(cc.ui.UICheckBoxButton.new(TestUIButtonScene.RADIO_BUTTON_IMAGES)
            :setButtonLabel(cc.ui.UILabel.new({text = "option 3", color = display.COLOR_RED}))
            :setButtonLabelOffset(20, 0)
            :align(display.LEFT_CENTER))
        :addButton(cc.ui.UICheckBoxButton.new(TestUIButtonScene.RADIO_BUTTON_IMAGES)
            :setButtonLabel(cc.ui.UILabel.new({text = "option 4 disabled", color = display.COLOR_RED}))
            :setButtonEnabled(false)
            :setButtonLabelOffset(20, 0)
            :align(display.LEFT_CENTER))
        --设置布局  每个按钮的边缘位置
        :setButtonsLayoutMargin(10, 10, 10, 10)
        --设置回调函数
        :onButtonSelectChanged(function(event)
            printf("Option %d selected, Option %d unselected", event.selected, event.last)
        end)
        --设置排列  按钮组的位置
        :align(display.LEFT_TOP, display.left + 40, display.top - 240)
        :addTo(self)
    group:getButtonAtIndex(4):setButtonSelected(true)

    --新建按钮对按钮组进行操作
    cc.ui.UIPushButton.new("GreenButton.png",{scale9 = true})
        --设置按钮大小
        :setButtonSize(160, 40)
        --设置按钮上的label
        :setButtonLabel(cc.ui.UILabel.new({text = "Remove option 2", size = 16, color = display.COLOR_BLUE}))
        --设置按钮在按下状态下的回调函数
        :onButtonPressed(function(event)
            event.target:getButtonLabel():setColor(display.COLOR_RED)--按钮上的字体变红
        end)
        --设置按钮在释放状态下的回调函数
        :onButtonRelease(function(event)
            event.target:getButtonLabel():setColor(display.COLOR_BLUE)---按钮上的字体变蓝
        end)
        --设置按钮的点击函数
        :onButtonClicked(function(event)
            if group:getButtonsCount() == 4 then
                group:removeButtonAtIndex(2)  --移除第二个按钮
                event.target:removeSelf()   ---移除自己
            end
        end)
        --设置位置
        :align(display.LEFT_CENTER, display.left + 200, display.top - 210)
        :addTo(self)
end

function TestUIButtonScene:createButtonGroup3(  )
    --创建勾选框
    cc.ui.UICheckBoxButton.new(TestUIButtonScene.CHECKBOX_BUTTON2_IMAGES)
        :setButtonLabel(cc.ui.UILabel.new({text = "checkbox 1", size = 16,  color = display.COLOR_BLUE}))
        :setButtonLabelOffset(40, 0)
        :setButtonLabelAlignment(display.LEFT_CENTER)
        :align(display.LEFT_CENTER, display.left + 80 ,display.top - 400)
        :addTo(self)

end

return TestUIButtonScene;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章