Событие Longpress вызывает событие касания - PullRequest
0 голосов
/ 11 ноября 2018

В представлении списка у меня происходит два события: событие касания и событие длинного нажатия, но длинное нажатие вызывает оба. Внутри файла .html:

<ListView class="listViewContainer" [items]="contactList">
  <ng-template let-item="item" let-i="index">
   <StackLayout 
    (loaded)="loaded($event)"
    orientation="horizontal"
    class="preview-info-container"
   >
   </StackLayout>
  </ng-template>
</ListView>

А затем файл .ts

loaded(args) {
const element = args.object;
element.on("loaded, tap, longPress", (args) => {
  // console.log("Event: " + args.eventName + ", sender: " + args.object);
    if(args.eventName === "tap") {
      this.router.navigate(["card/contact/" + this.contact.id]);
    } else {
      this.togglePreviewOptions = !this.togglePreviewOptions;
    }
  });
}

У меня вопрос, как я могу предотвратить запуск события касания при длительном нажатии на определенное поле?

Это может быть повторяющаяся проблема NativeScript tap & longPress вместе не работают , однако, поскольку не было четкого ответа, я хотел бы поднять его снова.

Редактировать Еще немного информации: Версия проекта tns

$ tns --version 4.3.0-2018-08-31-12160

Глобальная версия нативного сценария

nativescript@4.3.0-2018-08-31-12160

Версия эмулятора:

Iphone 6, iOS 11.3

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Мне не удалось решить эту проблему, добавив два разных события (tap / longPress). В качестве решения я использую следующее

Внутри .html

   <StackLayout (touch)="onTouch($event)">
      <Contact-Preview [contact]=contactList[i]></Contact-Preview>
   </StackLayout>

Внутри .ts

onTouch(args: TouchGestureEventData) {
  if(args.action === "down") {
    this.start = new Date().getMilliseconds();
  }
  if(args.action === "up") {
    this.end = new Date().getMilliseconds();
    const duration = Math.abs(this.start - this.end)
    console.log(duration > 150? "long press": "tap")
  }
}

Это предотвращает одновременный запуск событий tap и longPress, что позволяет обойти мою проблему.

0 голосов
/ 11 ноября 2018

Было бы намного проще определить 2 события в коде шаблона:

<ListView class="listViewContainer" [items]="contactList">
  <ng-template let-item="item" let-i="index">
   <StackLayout 
    (loaded)="loaded($event)"

    (tap)="functionWhenTap(item)" 
    (longPress)="functionWhenLongPress(item)" 

    orientation="horizontal"
    class="preview-info-container"
   >
   </StackLayout>
  </ng-template>
</ListView>

, а затем обработайте его в файле .ts с помощью:

  functionWhenTap(item: any) {
    // your things to do when tapped
  }

  functionWhenLongPress(item: any) {
    // your things to do when long pressed
  }

Это фактический кусок кода. Должно работать и для вас.

Вот рабочий пример, протестированный на моем физическом персональном устройстве: https://play.nativescript.org/?template=play-ng&id=XgBfFE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...