如何从 SwiftUI 创建分段控件并读取值?

Posted

技术标签:

【中文标题】如何从 SwiftUI 创建分段控件并读取值?【英文标题】:How to create a segmented control and read values from SwiftUI? 【发布时间】:2020-08-09 05:43:43 【问题描述】:
struct ContentView: View 
    @State private var favoriteColor = 0

    var body: some View 
        VStack 
            Picker(selection: $favoriteColor, label: Text("What is your favorite color?")) 
                Text("Red").tag(0)
                Text("Green").tag(1)
                Text("Blue").tag(2)
            .pickerStyle(SegmentedPickerStyle())

            Text("Value: \(favoriteColor)")
        
    

【问题讨论】:

哪里出了问题? 【参考方案1】:

你已经快到了!

首先,创建一个名为favoriteColor 的变量。您打算使用此变量从 Picker 中获取值,不是吗?

然后,将该变量传递给 Picker。不仅作为变量,而且作为绑定,前面有$ 符号。这将确保您的变量始终与 Picker 保持同步。简而言之,Binding 的作用是实际上只有一个变量,由 View 和 Picker 共享。如果你想了解更多,我相信网上有上百个这方面的教程,所以我在这里再解释一遍也没有意义!

那么会发生什么,选择器会在进行选择时更新您的变量。 但是对于哪个选项,它会给你的变量带来什么价值呢?

嗯,这就是您在.tag(...)s 中指定的值。因此,当用户选择“红色”时,喜爱颜色的值为 0,“绿色”为 1,“蓝色”为 2。

在选择更改时更新UI会如何?好吧,SwiftUI 会自动管理这个——这是 SwiftUI 最好的东西之一!

但还有一件事。当您像正在做的那样使用Text 中的值时,您将在运行时看到类似“Value: 1”的内容。如果我们能显示颜色的名称就更好了,不是吗?

有很多方法可以做到这一点,但一种是将Text("Value: \(favoriteColor)") 替换为:

Text("Favorite Color: \(["Red", "Green, "Blue"][favoriteColor])")

它的作用是创建一个数组并从中取出与所选颜色的索引相对应的值。所以当 favoriteColor 为 0 时,取数组的第一个元素,即“红色”。

希望对你有帮助!!

【讨论】:

以上是关于如何从 SwiftUI 创建分段控件并读取值?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 分段控制

如何使用 SwiftUI 在 MacOS 上配置多选分段控制

SwiftUI - 动态分段选取器过滤器

使用 TailwindCSS 创建动画分段控件

如何在 SwiftUI 中创建分段按钮?

从 iPhone App Store 重新创建分段控制