swift - 使用 SwiftUI,如何使一个 Toggle 更改另一个 Toggle 的状态?

标签 swift toggle swiftui

我想要三个 SwiftUI 切换开关,如果一个打开,另外两个关闭。

使用 UIKit 执行此类操作的旧方法是 didSet{},这不是 SwiftUI 的正确方法。我不知道是否有必要深入研究Combine来解决这个表面上看起来应该很简单的问题。

import SwiftUI

// Mutually exclusive toggle switches: when one toggle is on, the other two should be off. This is a start, where to go from here?

struct Junk: View {

    @State private var isOn1:Bool = true
    @State private var isOn2:Bool = false
    @State private var isOn3:Bool = false

    var body: some View
    {
        VStack
        {
            Toggle("T1", isOn: $isOn1)
            Toggle("T2", isOn: $isOn2)
            Toggle("T3", isOn: $isOn3)
        }
    }
}

struct Junk_Previews: PreviewProvider
{
    static var previews: some View
    {
        Junk()
    }
}

最佳答案

由于我不知道您的设计面临的挑战,因此我不会深入探讨它是否是正确的方法(除非这是您的问题)。但是,要实现您的要求,您可以使用中介绑定(bind):

struct Junk: View {

    @State private var isOn1:Bool = true
    @State private var isOn2:Bool = false
    @State private var isOn3:Bool = false

    var body: some View
    {
        let on1 = Binding<Bool>(get: { self.isOn1 }, set: { self.isOn1 = $0; self.isOn2 = false; self.isOn3 = false })
        let on2 = Binding<Bool>(get: { self.isOn2 }, set: { self.isOn1 = false; self.isOn2 = $0; self.isOn3 = false })
        let on3 = Binding<Bool>(get: { self.isOn3 }, set: { self.isOn1 = false; self.isOn2 = false; self.isOn3 = $0 })        

        return VStack
            {
                Toggle("T1", isOn: on1)
                Toggle("T2", isOn: on2)
                Toggle("T3", isOn: on3)
        }
    }
}

关于swift - 使用 SwiftUI,如何使一个 Toggle 更改另一个 Toggle 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699548/

相关文章:

ios - 为什么 NavigationView 必须是顶级 View ?

ios - 在 swift 3 中将数组转换为段标题

javascript - 如何使用 jquery 切换特定的 div

SwiftUI 多个图像点击手势如何在图像单击上执行全屏覆盖

css - 单击时切换 CSS3 动画

javascript - 导航子菜单从顶部推送

ios - SwiftUI如何对齐大于屏幕宽度的 View

object - Swift - 在 NSArray 中插入对象/项目/添加对象/项目

Swift 3 通用扩展参数

ios - Swift:我可以在集合/表格 View 单元格中加载 Url 数据吗?