Longpress и прокрутка списка - PullRequest
       63

Longpress и прокрутка списка

0 голосов
/ 22 декабря 2019

Использование SwiftUI (последний XCode и тестирование на IOS 13.3) Я пытаюсь реализовать жест длинного нажатия для элементов в списке, чтобы позволить взаимодействие пользователя с отдельными элементами. Проблема в том, что когда я устанавливаю «onLongPressGesture» в любом месте списка (для элементов, в самом списке), список больше не может быть прокручен. Я могу легко заставить работать простое нажатие, но долгое нажатие блокирует прокрутку.

Я собрал небольшой пример, показывающий эту проблему:

struct ContentView: View
{
  let data = [
    "Test 1","Test 2","Test 3","Test 4","Test 5",
    "Test 6","Test 7","Test 8","Test 9","Test 10",
    "Test 11","Test 12","Test 13","Test 14","Test 15",
    "Test 16","Test 17","Test 18","Test 19","Test 20"
  ]

  var body: some View
  {
    List
    {
      ForEach(data,id:\.self)
      {
        item in
        Text(item).onLongPressGesture{}
      }
    }
  }
}

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

Ответы [ 2 ]

0 голосов
/ 27 декабря 2019

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

Обработчик onTapGesture может быть пустым, если он объявлен первым.

struct ContentView: View
{
  let data = [
    "Test 1","Test 2","Test 3","Test 4","Test 5",
    "Test 6","Test 7","Test 8","Test 9","Test 10",
    "Test 11","Test 12","Test 13","Test 14","Test 15",
    "Test 16","Test 17","Test 18","Test 19","Test 20"
  ]

  var body: some View
  {
    List
    {
      ForEach(data,id:\.self)
      {
        item in
        Text(item).onTapGesture{}.onLongPressGesture{}
      }
    }
  }
}
0 голосов
/ 22 декабря 2019

Я думаю, вам стоит копаться в сочинении с сочетанием жестов. Здесь вы можете увидеть, как сочинять два и более жестов, но в вашем случае я думаю, что вам нужно исключительное поведение (которое описано в этой статье ). Таким образом, вы можете комбинировать DragGesture и LongPressGesture, но для ScrollView (я не нашел никакого решения для прокрутки List). Вот пример 1 и пример 2 того, как управлять ScrollView.content.offset (для прокрутки на DragGesture).

...