Жизненный цикл в SwifUI: запуск кода при выходе из дочернего представления иерархии NavigationView

Благодаря NavigationView в SwiftUI мы извлекаем выгоду из простоты построения кода. Однако не раскрываются, по крайней мере, на этих ранних стадиях отмены. Кроме того, снижение внимания к управлению жизненным циклом представлений затрудняет выяснение того, что и когда вызывать что-либо на основе состояния представления.

Я хотел бы запустить некоторый код, когда пользователь решает вернуться вверх по иерархии NavigationView (т. Е. Нажмите кнопку возврата, предоставленную NavigationView).

Я пробовал onDisappear() {} и другие варианты, но не могу заставить его работать. Вроде как не называется. OnAppear() {} действительно работает, поэтому я в тупике.

Любая помощь будет СУПЕР ЦЕННОЙ!

1 ответ

Решение

Я совершенно уверен, что на данном этапе нет метода, который можно было бы переопределить, чтобы поймать "обратное" действие навигационного представления.

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

import SwiftUI

struct SecondView: View {
    var body: some View {


        Text("Second View")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: NavigationViewCustomBack())
    }


}


==========================

import SwiftUI

struct NavigationViewCustomBack: View {
    var body: some View {
        HStack{
                Image(systemName: "chevron.left").foregroundColor(.blue).font(Font.title.weight(.medium))
                Text("Home").padding(.leading, -5)
            }
    }
}

struct NavigationViewCustomBack_Previews: PreviewProvider {
    static var previews: some View {
        NavigationViewCustomBack()
    }
}
Другие вопросы по тегам