开发者

Disable click event after touch and hold

I am developing an app iOS app in appcelerator and I got a table with user. When I click on the user it 开发者_StackOverflow中文版opens the profile but I also want the user to be able to copy the name just by tap and hold for 2 seconds.

These two event works fine separately but right now after tap and hold the click event fires to. How can I prevent the click event from firing after tap hold?

// Set the timeout

    var holdTime = 500, timeout;

    // Create the table touch start event listener

    table.addEventListener('touchstart', function(e) {

        // Set the selected user id

        var itemValue = e.row.value_full;

        // Define the function

        timeout = setTimeout(function(e) {

            // Create the fade out animation

            var fadeOut = Titanium.UI.createAnimation({

                curve: Ti.UI.ANIMATION_CURVE_EASE_IN_OUT,
                opacity: 0,
                duration: 1000

            });

            // Create the loading screen

            var copied = UI_messages.showFlash({label : 'Copied!'});

            // Add the loading screen

            win.add(copied);

            // Save value to clipboard

            Titanium.UI.Clipboard.setText(itemValue);

            // Fade the message out

            copied.animate(fadeOut);

        }, holdTime);

    });

    // Create the event listener for touch move

    table.addEventListener('touchmove', function() {

        // Clear the timeout

        clearTimeout(timeout);

    });

    // Create the event listener for touch move

    table.addEventListener('touchend', function(e) { 

        // Clear the timeout

        clearTimeout(timeout); 

    });


I've run into this problem before as well. The solution I used isn't very pretty, but it's the only effective way that I've found to suppress a touch event after a touch-and-hold.

The only working solution that I could find was to create a bool variable in a global namespace. In your setTimeout function, change the value of the bool to true to indicate that a touch-and-hold has occurred.

In the onClick event event for the row, check the global variable first to see if you've already created a touch-and-hold event - if you have, just return from the onClick event. This will effectively disable your click event when a touch-and-hold occurs.

Remember to set the global variable to false after the touch-and-hold function ends.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜