🦋

SwiftUI: Toggleを有効にするときにAlertで確認する処理を挟み込む

2022/06/12に公開

  • Toggle用のフラグとAlert用のフラグを用意する
  • Alertで許可された時の処理を登録
  • AlertでキャンセルされたらToggleのフラグをfalseに戻す
struct GeneralSettingsView: View {
    @AppStorage("Lever") private var lever = false
    @State private var showingAlert: Bool = false

    var body: some View {
        Form {
            Toggle("チェックボックス", isOn: $lever)
                .onChange(of: lever) { newValue in
                    if newValue {
                        showingAlert = true
                    }
                }
                .alert(isPresented: $showingAlert) {
                    let okButton = Alert.Button.default(Text("OK")) {
                        print("OKだった時の処理")
                    }
                    let cancelButton = Alert.Button.cancel {
                        lever = false
                    }
                    return Alert(title: Text("警告"),
                                 message: Text("本当に良いですか?"),
                                 primaryButton: okButton,
                                 secondaryButton: cancelButton)
                }
        }
        .padding(.horizontal, 50)
        .padding(.vertical, 20)
    }
}

Discussion