Найти индекс прокрутки Просмотр - PullRequest
0 голосов
/ 27 октября 2019

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

как я могу прочитать индекс представления прокрутки, где пользователь долго нажимает.

с помощью действия .onLongPressGesture {"для выполнения "} как я могу прочитать индекс, который будет передан в мою функцию для удаления элемента.

ScrollView(.horizontal, content: {
                        HStack(spacing: 100) {
                            ForEach(post, id: \.self){ item in


                                ZStack {
                                    Rectangle().foregroundColor(.blue).frame(width: 190, height: 170, alignment: .center)
                                    Text(item)

                                }.onTapGesture {
                                    self.temp = item


                                }

                                .onLongPressGesture {
                                    // find index
                                    //perform delate at index
                                    //pass the index to the function delate
                                    self.delate(index: 0)
                                }

                            }
                            }

                        .padding(.leading, 10)
                    })

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

Ответы [ 2 ]

1 голос
/ 27 октября 2019

попробуйте это: (и даже лучше, вам не нужно работать с индексом, вы просто можете работать с самим элементом)

struct ContentView: View {

    @State var post = ["test2", "test3", "test4"]



    var body: some View {
        ScrollView(.horizontal, content: {
            HStack(spacing: 100) {
                ForEach(post, id: \.self){ item in

                    VStack {
                        Rectangle().foregroundColor(.blue).frame(width: 190, height: 170, alignment: .center)
                        Text(item).onTapGesture {
                            //          post.remove(at: post.index(item))
                            self.post.remove(at: self.post.index(of: item)!)
                        }
                    }
                }
                .padding(.leading, 10)
            }
        })
    }
}
0 голосов
/ 27 октября 2019

Я думаю, что правильный способ - получить индекс в начале, а не внутри ViewBuilder:

   ForEach(Array(post.enumerated()), id: \.element){ (index, element) in
    ....
    }

Полный просмотр будет выглядеть так:

struct ScrollViewHStackView: View{

@State private var post = ["1","2","3","4","5"]
@State private  var temp : String = ""

func delete(index: Int){
 self.post.remove(at: index)
}

var body: some View {

 ScrollView(.horizontal, content: {
//HStack(spacing: 100) {
    HStack{
     ForEach(Array(post.enumerated()), id: \.element){ (index, element) in


        ZStack {
            Rectangle().foregroundColor(.blue).frame(width: 190, height: 170, alignment: .center)
            Text(element)

            }.onTapGesture {
            self.temp = element
            }

        .onLongPressGesture {


            // find index
            //perform delate at index
            //pass the index to the function delate
            self.delete(index: index)
        }

    }}
   // }

    .padding(.leading, 10)
    })}}
...