Update after StackOverflow suggestion that did not resolve the issue:
import SwiftUI
@Observable class RootViewController: CustomStringConvertible {
var description: String {
return switch(currentView) {
case .home: "Home"
case .formView: "Form View"
}
}
enum Views {
case home
case formView
}
public var currentView: Views = .home // This prevents the toolbar from displaying. Change to .formView, and it works.
}
struct ContentView: View {
@State private var rootViewController = RootViewController()
var body: some View {
switch rootViewController.currentView {
case .formView:
FormView()
case .home:
HomeView()
.environment(rootViewController)
}
}
}
struct FormView: View {
@State private var text: String = ""
@FocusState private var isInputActive: Bool
var body: some View {
NavigationStack {
Form {
TextField("Text", text: $text)
.keyboardType(.decimalPad)
.focused($isInputActive)
Text("Text: \(text)")
}
.navigationTitle("Keyboard Toolbar Test")
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button("Close") { isInputActive = false }
}
}
.padding()
}
}
}
struct HomeView: View {
@Environment(RootViewController.self) private var rootViewController
var body: some View {
Button("Open Form") {
rootViewController.currentView = .formView
}
}
}
#Preview {
ContentView()
}
Topic:
UI Frameworks
SubTopic:
SwiftUI