Отключить событие нажатия после касания и удерживать - PullRequest
3 голосов
/ 12 сентября 2011

Я занимаюсь разработкой приложения для iOS в appcelerator и получил таблицу с пользователем. Когда я нажимаю на пользователя, он открывает профиль, но я также хочу, чтобы пользователь мог скопировать имя, просто нажав и удерживая в течение 2 секунд.

Эти два события прекрасно работают отдельно, но прямо сейчас после нажатия и удержания срабатывает событие щелчка. Как я могу предотвратить срабатывание события нажатия после удержания нажатия?

// 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); 

    });

1 Ответ

2 голосов
/ 12 сентября 2011

Я тоже сталкивался с этой проблемой раньше. Решение, которое я использовал, не очень красивое, но я нашел единственный эффективный способ подавления события касания после касания и удержания.

Единственное рабочее решение, которое я смог найти, - это создать переменную bool в глобальном пространстве имен. В вашей функции setTimeout измените значение bool на true, чтобы указать, что произошло касание и удержание.

В событии события onClick для строки, сначала проверьте глобальную переменную, чтобы увидеть, если вы уже создали событие касания и удержания - если у вас есть, просто вернитесь из события onClick. Это эффективно отключит ваше событие нажатия, когда произойдет касание и удержание.

Не забудьте установить глобальную переменную на false после завершения функции касания и удержания.

...