SwiftUI NavigationLink: как вызвать функцию перед отображением вида назначения

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

Код ниже, похоже, не работает: myFunction вызывается, но целевой вид не отображается.

Похоже, что onTapGesture перезаписывает NavigationLink пункт назначения.

NavigationView {
    List(restaurants) { restaurant in
        NavigationLink(destination: RestaurantView(restaurant: restaurant)) {
            RestaurantRow(restaurant: restaurant)
        }.onTapGesture { myModel.myFunction(restaurant) }
    }
}

Как я могу получить и то, и другое при нажатии на элемент списка?

  • функция называется
  • отображается вид назначения

1 ответ

Попробуй добавить NavigationLink в Button, нравиться:

Button(action: {
    //Call here
    myModel.myFunction(restaurant)
}, label: {
    NavigationLink(destination: RestaurantView(restaurant: restaurant)) {
            RestaurantRow(restaurant: restaurant)
    }
})

ИЗМЕНИТЬ вставленный тестовый код, попробуйте напрямую

 struct TestNavigationView: View {

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Detail").onAppear() {
                    test()
                }) {
                    Text("Click")
                }
            }
        }

    }

    func test() {
        print("Hell0")
    }
}

другой подход: (может не работать, если List там)

struct TestNavigationView: View {

    var body: some View {
        NavigationView {
            VStack {

                NavigationLink(destination: Text("Detail")) {
                    Text("Click")
                }.simultaneousGesture(TapGesture().onEnded{
                    test()
                })

            }
        }

    }

    func test() {
        print("Hell0")
    }
}
Другие вопросы по тегам