TabView (SwiftUI): Ответить на вкладку на уже активном tabItem - PullRequest
1 голос
/ 05 апреля 2020

У меня есть ContentView.swift, который содержит TabView.

В View1 есть NavigationView с некоторыми дочерними представлениями. View2 - это всего лишь один View.

Я хотел бы выполнить какое-либо действие (всегда возвращаться к View1, даже когда он находится в дочернем View для View1), когда нажимается первый tabItem. Даже если это уже активный tabItem.

Я попробовал на TabGesture, как показано ниже, но, похоже, ничего не сделал. Добавление его непосредственно перед ".tag (0)" ничего не изменило, либо:

                            TabView {
                            View1()
                                .onTapGesture {
                                    print("Test")
                            }
                                .tabItem {
                                    Image(systemName: "doc.plaintext")
                                        .font(.system(size: 25))
                                    Text("View1")
                            }.tag(0)

                            View2()
                                .tabItem {
                                    Image(systemName: "person.crop.circle")
                                        .font(.system(size: 25))
                                    Text("View2")
                            }.tag(1)

1 Ответ

2 голосов
/ 05 апреля 2020

Здесь возможен подход. Протестировано с Xcode 11.4 / iOS 13.4

struct TestTabSelectionAction: View {
    @State private var selectedTab = 0

    var body: some View {
        let selection = Binding<Int>(
            get: { self.selectedTab },
            set: { self.selectedTab = $0
                print("Pressed tab: \($0)")
                if $0 == 0 {
                           // <<< your action here !!
                }
        })

        return TabView(selection: selection) {
            View1()
            .tabItem {
                Image(systemName: "doc.plaintext")
                    .font(.system(size: 25))
                Text("View1")
            }.tag(0)

            View2()
                .tabItem {
                    Image(systemName: "person.crop.circle")
                        .font(.system(size: 25))
                    Text("View2")
            }.tag(1)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...