#swiftui #observedobject #swiftui-tabview
Вопрос:
Мне нужно немного обновить некоторые представления после завершения сетевого запроса, но моя панель вкладок автоматически переключилась на первое представление вкладок после обновления страницы, вот мой код:
//tab view
struct PricesView: View {
@ObservedObject var netWorkManager = NetworkManager.shareInstance
var body: some View {
if netWorkManager.dataList.isEmpty {
LoadingView().onAppear(perform: netWorkManager.fetchPricesData)
} else {
Text("Prices").foregroundColor(.red)
}
}
}
...
//main view
struct ContentView: View {
var body: some View {
TabView {
HomeView().tabItem {
Image(systemName: "house.fill")
Text("home")
}
AlertsView().tabItem {
Image(systemName: "flag.fill")
Text("alerts")
}
LinksView().tabItem {
Image(systemName: "link.icloud")
Text("link")
}
PricesView().tabItem {
Image(systemName: "bitcoinsign.circle")
Text("prices")
}
}
}
}
как я могу этого избежать?
Ответ №1:
Используйте выделение и пометку.
struct ContentView: View {
@State var selection = 0 // <- Here declare selection
var body: some View {
TabView(selection: $selection) { // <- Use selection here
HomeView().tabItem {
Image(systemName: "house.fill")
Text("home")
}.tag(0) // <- Add tag
AlertsView().tabItem {
Image(systemName: "flag.fill")
Text("alerts")
}.tag(1) // <- Add tag
LinksView().tabItem {
Image(systemName: "link.icloud")
Text("link")
}.tag(2) // <- Add tag
PricesView().tabItem {
Image(systemName: "bitcoinsign.circle")
Text("prices")
}.tag(3) // <- Add tag
}
}
}