Navigation mit Toolbar und Einstellungsbutton
Beschreibung
Diese View zeigt eine Navigationsoberfläche mit Titel und zwei Steuerelementen in der Toolbar. Links befindet sich ein Bearbeiten Button und rechts ein Einstellungs Button, der eine einfache Einstellungsansicht als Sheet öffnet. Der Willkommens Text dient als Platzhalter für den Hauptinhalt.
🔍 Zweck
- Aufbau einer Basisnavigation mit Titel und Toolbar
- Hinzufügen eines Settings Einstiegs ohne eigenen Bildschirmwechsel
- Prototyping von Toolbars mit führenden und abschließenden Aktionen
- Demonstration von
NavigationStack
undToolbarItem
Platzierungen - Erweiterbare Vorlage für Listen oder Detailansichten
🖥️ Betriebssystem
iOS
📄 Codebeispiel
import SwiftUI
@main
struct ToolbarNavigationApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
public struct ContentView: View {
// Control presentation of the settings sheet
@State private var showSettings = false
public init() {}
public var body: some View {
NavigationStack {
// Main content placeholder
Text("Welcome to the app!")
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.padding()
.navigationTitle("Home")
.toolbar {
// Leading toolbar item: edit button
ToolbarItem(placement: .navigationBarLeading) {
// EditButton toggles edit mode for editable content (e.g., lists)
EditButton()
}
// Trailing toolbar item: settings button
ToolbarItem(placement: .navigationBarTrailing) {
Button {
// Present settings as a sheet
showSettings = true
} label: {
Image(systemName: "gear")
.accessibilityLabel("Open Settings")
}
}
}
}
// Present a simple settings screen
.sheet(isPresented: $showSettings) {
SettingsView()
}
}
}
// Minimal settings screen presented by the gear button
private struct SettingsView: View {
// Example toggles to simulate settings
@State private var notifications = true
@State private var analytics = false
var body: some View {
NavigationStack {
Form {
// Basic settings toggles
Toggle("Notifications", isOn: $notifications)
Toggle("Share Analytics", isOn: $analytics)
}
.navigationTitle("Settings")
.toolbar {
// Close button for the sheet
ToolbarItem(placement: .cancellationAction) {
// The dismiss action is provided by the environment
DismissButton()
}
}
}
}
}
// Helper to dismiss sheets from a toolbar
private struct DismissButton: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
Button("Close") {
// Dismiss the presented sheet
dismiss()
}
}
}
// Modern Swift 5.10+ preview syntax
#Preview {
ContentView()
}