如何在 Corona 中从按钮小部件中移除 onEvent?

我正在尝试从按钮部件中移除onEvent监听器。我尝试将nil赋值给onEvent属性,但它不起作用,最后我尝试了这个:

buttonWidget : removeEventListener("touch", buttonWidget.onEvent)

我有几个类似的按钮,它只停止了所有按钮的事件监听器。您有什么建议吗?我如何删除一个按钮部件的事件监听器?谢谢。

这是我创建按钮部件的方式:

for i=0,2 do
 for j=0,8 do
    count=count+1
    letterBtn[count] = widget.newButton{
    id = alphabet[count],
    left = 5+j*50,
    top = H-160+i*50,
    label = alphabet[count],
    width = 45,
    height = 45,
    font = nil,
    fontSize = 18,
    labelColor = { default = {0,0,0}, over = {255,255,255}},
    onEvent = btnOnEventHandler
    };
  end
end

您能告诉我如何稍后删除onEvent吗?

好的,我尝试了Button:setEnabled(false),但它仍然禁用了所有按钮,而不仅是一个。我已经尝试了您的第二个建议,但它给出了相同的结果。我在复制其余代码。你能否看一看并告诉我我错过了什么?

local function checkLetter(e)
if(guessWord) then
    for i=1, #guessWord do
        local c = guessWord:sub(i,i)
        if c==e.target.id then
            letter[i].text = e.target.id
            letterCount = letterCount +1
            print("letterCount"..letterCount)
            e.target:setEnabled(false)
        end
    end
    if (letterCount == #guessWord and not hanged) then
        timer.performWithDelay(500, function()
            letterCount=0
            rightWGuess = rightWGuess+1
            for k,v in pairs(notGuessedWord) do
                if v == guessWord then
                notGuessedWord[k]=nil
                end
            end
            enableButtons()
            startGame() end ,1)
    end
end
end

local function btnOnEventHandler(e)
   if(e.phase == "began") then
    checkLetter(e)
    print(e.target.id)
   end
    return true
end
点赞
用户185316
用户185316

如果您想暂时(或永久)停用按钮对触摸事件的响应,您可以使用 Button:setEnabled(false)

以下代码对于我来说可以将监听器从2个按钮中删除。按钮1和3在预期中停止了响应事件,而2、4和5仍然响应。

更新: 要禁用,必须在“ended”阶段执行,否则 Corona 会混淆。

widget = require 'widget'

local function btnOnEventHandler(event)
    print('Event', event.target.id, event.phase)
    if event.phase == 'ended' then
        -- 禁用按钮,以防它被再次点击
        -- 必须在最后一个状态中禁用,否则 Corona 会混淆
        event.target:setEnabled(false)
    end
end

local buttons = {}
for i=1,5 do
    buttons[i] = widget.newButton{
        id = 'button' .. i,
        left = display.contentCenterX - 50,
        top = 60 * i,
        label = 'Button ' .. i,
        width = 100,
        height = 50,
        onEvent = btnOnEventHandler
    }
end

buttons[1]:removeEventListener('touch', buttons[1].onEvent)
buttons[3]:removeEventListener('touch', buttons[3].onEvent)
2013-09-04 15:21:07