2016-10-01 7 views
1

J'ai un composant widget.newScrollView et un widget.newButton devant lui. Malheureusement, lorsque je clique sur mon bouton, il appelle aussi mon gestionnaire "tap" ScrollView. Comment arrêter mon ScrollView d'obtenir cet événement? Voici une partie du code que je utilise:lua corona - comment désactiver les événements tactiles widget.newScrollView

local function handleButtonEvent(event) 
    if ("ended" == event.phase) then 
     print("Button was pressed and released") 
    end 
    return true; **I tried this - but it had no effect** 
end 

ajouté

local button1 = widget.newButton(
{ 
    label = "button", 
    onEvent = handleButtonEvent, 
    emboss = false, 
    shape = "roundedRect", 
    width = 400, 
    height = 100, 
    cornerRadius = 32, 
    fillColor = { default={1,0,0,1}, over={1,0.1,0.7,1} }, 
    strokeColor = { default={1,0.4,0,1}, over={0.8,0.8,1,1} }, 
    strokeWidth = 4, 
    fontSize=100; 
} 

J'ai un tableau (planètes) de display.NewImages et mon gestionnaire - comme ceci:

local planets = {}; 
planets[1] = display.newImage("planetHexs/001.png", _topLeft_x, _topLeft_y); 
planets[2] = display.newImage("planetHexs/002.png", _topLeft_x, _topLeft_y + _planet_height2); 
.... 

local scrollView = widget.newScrollView(
{ 
    top = 0, 
    left = 0, 
    width = display.actualContentWidth, 
    height = display.actualContentHeight, 
    scrollWidth = 0, 
    scrollHeight = 0, 
    backgroundColor = { 0, 0, 0, 0.5}, 
    verticalScrollDisabled=true; 
} 

for i = 1, #planets do 
    local k = planets[i]; 
    scrollView:insert(k) 
end 

function PlanetTapped(num) 
    print("You touched the object!"..num); 
end 

for i = 1, #planets do 
    local k = planets[i]; 
    k:addEventListener("tap", function() PlanetTapped(i) end) 
end 

Je reçois ce journal d'impression:

Button was pressed and released 

You touched the object2 
+0

Copie possible de [Propagation d'événement d'arrêt dans Corona SDK] (http://stackoverflow.com/questions/20140217/stop-event-propagation-in-corona-sdk) – Piglet

+0

Veuillez utiliser google avant de poser une nouvelle question. Si vous souhaitez arrêter la propagation d'un événement, le dernier gestionnaire d'événements qui doit gérer l'événement doit renvoyer true. juste mettre retour vrai comme la dernière déclaration dans votre fonction handleButtonEvent ... – Piglet

+0

merci beaucoup Piglet :) J'ai essayé mais cela n'a pas fonctionné :( J'ai ajouté un peu plus de mon code qui pourrait aider :) S'il vous plaît aider un peu plus :) –

Répondre

0

Vous devez renvoyer true sur vos fonctions d'événement pour empêcher la propagation. Cela indique essentiellement à Corona que l'événement a été géré correctement et qu'aucun autre écouteur d'événement ne doit être déclenché. You can read more about event propagation here in the docs.

"tap" et "touch" événements sont traités avec différents auditeurs, donc si vous souhaitez arrêter les robinets lorsque vous appuyez sur le bouton, vous aurez ajouter un écouteur "tap" à votre bouton ainsi que l'essentiel retourne juste true pour empêcher ou bloquer appuyez sur les événements pour tout ce qui se cache derrière.

button1:addEventListener("tap", function() return true end) 

Étant donné que le bouton ne dispose pas d'un événement du robinet, robinet événements tout simplement aller par le bouton, à tous les objets derrière elle qui ont un événement "tap".

+0

merci tas Basilio! ce code a bien fonctionné :) –