SwiftUI – Toggle Switch

Toggle

Toggle in SwiftUI is equivalent UI as UISwitch for UIKit.

It is on/off switch

But, different part is how to manage on/off state.

Example

ToggleTest.swift

import SwiftUI

struct ToggleTest: View {
    
    @Binding var isFavorite: Bool
    
    var body: some View {
        VStack {
            Toggle(isOn: self.$isFavorite) {
                Text("Toggle")
            }.padding(10)
        }
    }
}

struct ToggleTest_Previews: PreviewProvider {
    static var previews: some View {
        ToggleTest(isFavorite: .constant(false))
    }
}

Add Toggle with on/off parameter. This parameter is defined as @Binding var

For preview, just pass Binding<Bool>.constant(false) for test.

Actually, only this, toggle switch is not working in an app.

How to pass @Binding var for actual use

Now, View is ready, but still have @Binding. For test, constant is fine, but we need to change this parameter

ToogleTestParentView.swift

This is parent view, and have @EnvironmentObject to manage status in multiple Views.

import SwiftUI

class ToggleV: ObservableObject {
    @Published var toggle = false
}

struct ToggleTestParentView: View {
    
    @EnvironmentObject var toggleV : ToggleV
    
    var body: some View {
        HStack {
            ToggleTest(isFavorite: $toggleV.toggle)
        }
    }
}

struct ToggleTestParentView_Previews: PreviewProvider {
    static var previews: some View {
        ToggleTestParentView().environmentObject(ToggleV())
    }
}

Use

Let’s use this from SceneDelegate

let contentView = ToggleTestParentView().environmentObject(ToggleV())
        
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: contentView)
    self.window = window
    window.makeKeyAndVisible()
}

Pass environmentObject by code. And this parameter keeps in memory.

iOS
スポンサーリンク
Professional Programmer2

コメント