Как узнать, что NavigationView возвращается в SwiftUI? - PullRequest
0 голосов
/ 05 мая 2020

Когда пользователь нажимает кнопку «Назад», можем ли мы получить событие и что-нибудь сделать?

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

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

struct ContentView: View {
    @State var isPresented: Bool = false

    var destination: some View {
        Text("Detail")
                .onDisappear(perform: {
                    print("On Disappear")
                })
    }

    var body: some View {
        NavigationView {
            NavigationLink(destination: destination, isActive: $isPresented) {
                Text("Main")
            }
        }
    }
}
0 голосов
/ 05 мая 2020

Я думаю, вы можете использовать isActive и прослушивать изменение привязки, я знаю, что привязка не имеет didSet, но вы можете добавить его с этим расширением

extension Binding {
    func didSet(execute: @escaping (Value) ->Void) -> Binding {
        return Binding(
            get: {
                return self.wrappedValue
            },
            set: {
                execute($0)
                self.wrappedValue = $0
            }
        )
    }
}

Затем вы можете добавить состояние для отслеживания состояния представления

struct ContentView: View {

    @State isPresented: Bool = false

    var body: some View {
        NavigationView {
             NavigationLink(Text("Follow to a Text"), destination: Text("detail view"), isPresented: $isPresented.didSet{ if !self.isPresented { print("Back Pressed") } })
        }

}

В настоящее время мне неизвестен какой-либо другой способ сделать то, что вы хотите, без настраиваемой кнопки

...