2

This may have a very simple answer, as I am pretty new to Swift and SwiftUI and am just starting to learn. I'm trying to schedule local notifications that will repeat daily at a specific time, but only do it if a toggle is selected. So if a variable is true, I want that notification to be scheduled. I looked at some tutorials online such as this one, but they all show this using a button. Instead of a button I want to use a toggle. Is there a certain place within the script that this must be done? What do I need to do differently in order to use a toggle instead of a button?

1 Answers1

0

You can observe when the toggle is turned on and turned off -- In iOS 14 you can use the .onChange modifier to do this:

import SwiftUI

struct ContentView: View {
    
    @State var isOn: Bool = false
    
    var body: some View {
        Toggle(isOn: $isOn, label: {
            Text("Notifications?")
        })

        /// right here!
        .onChange(of: isOn, perform: { toggleIsOn in
            if toggleIsOn {
                print("schedule notification")
            } else {
                print("don't schedule notification")
            }
        })
    }
}

For earlier versions, you can try using onReceive with Combine:

import SwiftUI
import Combine

struct ContentView: View {

    @State var isOn: Bool = false

    var body: some View {
        Toggle(isOn: $isOn, label: {
            Text("Notifications?")
        })
        
        /// a bit more complicated, but it works
        .onReceive(Just(isOn)) { toggleIsOn in
            if toggleIsOn {
                print("schedule notification")
            } else {
                print("don't schedule notification")
            }
        }
    }
}

You can find even more creative solutions to observe the toggle change here.

aheze
  • 24,434
  • 8
  • 68
  • 125