Изменение TabView (выделение :) с помощью переменной @Published - PullRequest
1 голос
/ 06 апреля 2020

У меня есть вкладка с помеченными элементами.

struct ContentView: View {
@ObservedObject var tabController = TabController()

var body: some View {
    TabView(selection: $tabController.selectedTab) {

        HomeView()
            .tabItem{
                Image(systemName: "house.fill")
                    .font(.system(size: 20))

                Text("Home")
        }.tag(0)

        ...
}

У меня есть ObservableObject с переменной @Published selectedTab и функцией для ее изменения.

Когда я звоню функция, она правильно печатает индекс вкладки, на которую я хочу переключиться, но вкладка не переключается. Кто-нибудь знает почему?

class TabController: ObservableObject {
    @Published var selectedTab = 3

    func changeTab(tabIndex: Int) {
        self.selectedTab = tabIndex
        print(selectedTab)
    }
}

Вместо changeTab(tabIndex:) Я также попытался напрямую изменить selectedTab.

Редактировать: я вызываю changeTab (tabIndex :), например так:

struct DetailsView: View {
    @ObservedObject var tabController = TabController()

    var body: some View {
        ScrollView {
            VStack(alignment: .leading, spacing: 0) {

                  Button(action: {self.tabController.changeTab(tabIndex: 2)}) {
                      HStack {
                          Image(systemName: "bubble.left.fill")
                              .buttonIconModifier()
                          Text("Switch Tab")
                      }
                  }.modifier(ButtonStyle())
             }
         }        
    }
}

1 Ответ

1 голос
/ 06 апреля 2020

Вот ошибка

struct ContentView: View {
@ObservedObject var tabController = TabController() // << 1st controller

и

struct DetailsView: View {
    @ObservedObject var tabController = TabController() // << 2nd controller

ваши представления используют разные экземпляры - DetailsView изменение 2-го, но ContentView прослушивание 1-й.

Им нужно использовать один экземпляр. Я спросил как они связаны , потому что исправление для передачи tabController от одного к другому или доля через EnvironmentObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...