На первой вкладке я хочу программно переключиться на вторую вкладку, а затем немедленно протолкнуть экран с подробностями в навигационном вкладке второго .
Код: Выделить всё
struct FirstTab: View {
var onNavigate: (String) -> Void
var body: some View {
VStack {
Text("FirstTab")
Button("Go to SecondTab") {
onNavigate("Hello from FirstView")
}
}
}
}
class SecondTabViewModel: ObservableObject {
@Published var textToShow: String? = nil
}
struct SecondTab: View {
@ObservedObject var viewModel: SecondTabViewModel
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
VStack {
Text("SecondTab")
}
.navigationDestination(for: String.self) { value in
DetailView(text: value)
}
.onChange(of: viewModel.textToShow) { oldValue, newValue in
print("onChange SecondTab text: \(String(describing: newValue))")
if let newValue = newValue, newValue != oldValue {
print("Pushing DetailView with: \(newValue)")
path.append(newValue)
}
}
}
}
}
struct DetailView: View {
let text: String
var body: some View {
VStack {
Text("DetailView")
Text("Text: \(text)")
}
}
}
struct ContentView: View {
@State private var selectedTab = 0
@StateObject private var secondVM = SecondTabViewModel()
var body: some View {
TabView(selection: $selectedTab) {
FirstTab { text in
print("Closure called with text: \(text)")
selectedTab = 1 // switch tab
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
secondVM.textToShow = text
}
}
.tabItem { Label("First", systemImage: "1.circle") }
.tag(0)
SecondTab(viewModel: secondVM)
.tabItem { Label("Second", systemImage: "2.circle") }
.tag(1)
}
}
}
Закрытие правильно вызывается, когда я нажимаю кнопку в Firsttab. /> Но ничего не появляется-onchange называется, но не происходит толчка. PrettyPrint-Override ">
Код: Выделить всё
FirstTab { text in
print("Closure called with text: \(text)")
selectedTab = 1 // switch tab
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
secondVM.textToShow = text
}
}
< /code>
Но это похоже на взлом. < /p>
Почему навигация не нажимает (path.appendПодробнее здесь: https://stackoverflow.com/questions/797 ... w-new-view
Мобильная версия