Предотвращение появления представления в NavigationView - PullRequest
4 голосов
/ 08 марта 2020

У меня есть SwiftUI View, который выдвигает новый подробный вид с помощью обычного NavigationLink:

NavigationLink(destination: DetailView() ) { Text("Show Detail View")  }

Мне нужен обходной путь, чтобы предотвратить появление подробного вида, когда пользователь нажимает кнопку «Назад». Я не смог найти родной способ SwiftUI сделать это.

1 Ответ

3 голосов
/ 08 марта 2020

Ниже приведен возможный подход с использованием настраиваемой кнопки возврата (примечание: при добавлении любого ведущего элемента панели навигации автоматически отключается кнопка возврата по умолчанию)

Протестировано с Xcode 11.2 / iOS 13.2

struct DemoDetailsWithCustomBack: View {
    @Environment(\.presentationMode) var presentationMode
    @State private var allowsBack = true

    var body: some View {
            Text("Details here")
                .navigationBarItems(
                    leading: Button(action: {
                        if self.allowsBack {
                            self.presentationMode.wrappedValue.dismiss()
                        } else {
                            // activate alert here
                        }
                    }, label: { Image(systemName: "chevron.left") })
                )
    }
}

struct TestNavBarButton_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
            NavigationLink(destination: DemoDetailsWithCustomBack() ) { Text("Show Detail View")  }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...