ios 使选择器默认值成为占位符

az31mfrm  于 2023-08-08  发布在  iOS
关注(0)|答案(2)|浏览(102)

是否可以为Swift Picker设置占位符文本?我一直在寻找一个有用的答案,但到目前为止还没有成功。
目前,在将可用列表值传递给选择器时,我也会传递一个默认值作为初始值。但是,该默认值的处理方式与用户拾取该默认值的处理方式相同。我试图实现的是,默认值应该是灰色的(就像标准文本字段的常规占位符),当用户打开选择器时,该值将“消失”作为默认值,迫使用户从列表中选择一些东西(但不会丢失范围)-
例如,如果我有一个选择器,用于选择1-200之间的值,并且我将占位符设置为100,则当您打开选择器时,选择器仍然会显示此值(以避免从头开始滚动),但除非用户实际选择它,否则它不会直接作为目标值。

zaqlnxep

zaqlnxep1#

在这种情况下,Menu可能是比Picker更好的选择。

Menu("Label") {
    Button("Menu Item", action: menuAction)
    Button("Other Menu Item", action: otherMenuAction)
}

字符串
Menu Documentation

lvjbypge

lvjbypge2#

您可以通过在SwiftUI选择器中的ForEach之前添加if语句来获得Placeholder值。
这个想法是给予@State var selection一个值,占位符将被保存在这个值上。如果此值更改为预期的选择,则占位符值将消失。

struct ContentView: View {

  @State private var selection = "Placeholder"

  var body: some View {
    Picker("Food", selection: $selection) {
      if selection == "Placeholder" {
        Text("Select ...").tag("Placeholder")
      }

      ForEach(foods, id: \.id) {
        Text($0.name).tag($0.name)
      }
    }.pickerStyle(.menu)
  }
}

let foods: [Food] = [
  .init(name: "Pasta"),
  .init(name: "Burger"),
  .init(name: "Salad")
]

struct Food {
  let id = UUID()
  let name: String
}

字符串

相关问题