0

ボタン ウィジェットから onEvent リスナーを削除しようとしています。nil を onEvent 属性に割り当てようとしましたが、うまくいきませんでした。最後にこれを試しました:

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

そのようなボタンがいくつかあり、すべてのボタンのイベントリスナーが停止しました。何を指示してるんですか?1 つのボタン ウィジェットのイベント リスナーを削除するにはどうすればよいですか? ありがとう。

ボタンウィジェットを作成する方法は次のとおりです。

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) を試しましたが、それでも 1 つだけでなくすべてのボタンが無効になります。私はすでにあなたの2番目のアドバイスを試しましたが、同じ結果が得られます. 残りのコードをコピーしています。それを見て、何が欠けているか教えていただけますか?

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
4

1 に答える 1

1

ボタンがタッチ イベントに応答するのを一時的 (または永続的) に停止したい場合は、Button:setEnabled(false)を使用できます。

以下は、たった2つのボタンからリスナーを削除するために私にとってはうまくいきました。ボタン 1 と 3 は期待どおりにイベントに応答しなくなりましたが、2、4、および 5 はまだ応答していました。

更新:無効にするには、「終了」フェーズでそれを行う必要があります。そうしないと、コロナが混乱します。

widget = require 'widget'

local function btnOnEventHandler(event)
    print('Event', event.target.id, event.phase)
    if event.phase == 'ended' then
        -- Disable the button so it can't be clicked again
        -- Must disable in the end state or Corona gets 
        -- confused
        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-04T15:21:07.380 に答える