Natives iOS-App-Gerüst (Xcode 26, synchronisierte Ordner, iOS 18+). Features: - Gewohnheiten anlegen (Name, SF-Symbol, Farbe), heute abhaken, Streaks, Löschen - Detailansicht mit Monatskalender (Tage nachtragbar) und Statistiken - Tägliche Erinnerungen via lokale Notifications - Home-Screen-Widget (klein/mittel) mit App-Group-Datenaustausch
38 lines
1.3 KiB
Swift
38 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
/// Toggle + time picker that drives an optional reminder time. Designed to sit
|
|
/// inside a Form Section or a VStack. Requests notification permission when the
|
|
/// user first switches the reminder on. Scheduling is the caller's job.
|
|
struct ReminderEditor: View {
|
|
@Binding var reminderTime: Date?
|
|
|
|
@State private var enabled: Bool
|
|
@State private var time: Date
|
|
|
|
init(reminderTime: Binding<Date?>) {
|
|
_reminderTime = reminderTime
|
|
_enabled = State(initialValue: reminderTime.wrappedValue != nil)
|
|
_time = State(initialValue: reminderTime.wrappedValue ?? NotificationManager.defaultTime)
|
|
}
|
|
|
|
var body: some View {
|
|
Group {
|
|
Toggle(isOn: $enabled) {
|
|
Label("Tägliche Erinnerung", systemImage: "bell.fill")
|
|
}
|
|
.onChange(of: enabled) { _, isOn in
|
|
reminderTime = isOn ? time : nil
|
|
if isOn {
|
|
Task { await NotificationManager.requestAuthorization() }
|
|
}
|
|
}
|
|
|
|
if enabled {
|
|
DatePicker("Uhrzeit", selection: $time, displayedComponents: .hourAndMinute)
|
|
.onChange(of: time) { _, newValue in
|
|
reminderTime = newValue
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|