Вкладка переключения и нажатие на NavigationStack не показывает нового представленияIOS

Программируем под IOS
Ответить
Anonymous
 Вкладка переключения и нажатие на NavigationStack не показывает нового представления

Сообщение Anonymous »

У меня есть Tabview с двумя вкладками (FirstTab и SecondTab).
На первой вкладке я хочу программно переключиться на вторую вкладку, а затем немедленно протолкнуть экран с подробностями в навигационном вкладке второго .

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»