我已经制作了一个只有一个按钮和一个选择器的迷你应用程序,其想法是在选择器上方有一个完成按钮,因此一旦我选择了一个值,我就可以按完成按钮,选择器将关闭。
我知道,如果您单击“单击我”按钮,它将打开,如果再次单击,则关闭选择器,但是我正在寻找一个与选择器一起出现的按钮,而在单击时消失。
几乎就像选择器上方带有完成按钮的工具栏
@State var expand = false
@State var list = ["value1", "value2", "value3"]
@State var index = 0
var body: some View {
VStack {
Button(action: {
self.expand.toggle()
}) {
Text("Click me \(list[index])")
}
if expand {
Picker(selection: $list, label: EmptyView()) {
ForEach(0 ..< list.count) {
Text(self.list[$0]).tag($0)
}
}.labelsHidden()
}
}
第三张图片是我正在努力实现的目标,前两张图片是我当前获得的东西
感谢您的帮助
答案 0 :(得分:4)
在if子句中添加一个按钮:
if expand {
VStack{
Button(action:{self.expand = false}){
Text("Done")
}
Picker(selection: $list, label: EmptyView()) {
ForEach(0 ..< list.count) {
Text(self.list[$0]).tag($0)
}
}.labelsHidden()
}
}
答案 1 :(得分:1)
这是我的一种方法...当然仍然可以进行调整(动画,矩形等),但是思想的方向应该明确
结果演示:
代码:
struct ContentView: View {
@State var expand = false
@State var list = ["value1", "value2", "value3"]
@State var index = 0
var body: some View {
VStack {
Button(action: {
self.expand.toggle()
}) {
Text("Click me \(list[index])")
}
if expand {
Picker(selection: $index, label: EmptyView()) {
ForEach(0 ..< list.count) {
Text(self.list[$0]).tag($0)
}
}.labelsHidden()
.overlay(
GeometryReader { gp in
VStack {
Button(action: {
self.expand.toggle()
}) {
Text("Done")
.font(.system(size: 42))
.foregroundColor(.red)
.padding(.vertical)
.frame(width: gp.size.width)
}.background(Color.white)
Spacer()
}
.frame(width: gp.size.width, height: gp.size.height - 12)
.border(Color.black, width: 8)
}
)
}
}
}
}
答案 2 :(得分:1)
这也将起作用(特别是如果您在Vstack之外进行操作)...
// Toolbar for "Done"
func createToolbar() {
let toolBar = UIToolbar()
toolBar.sizeToFit()
// "Done" Button for Toolbar on Picker View
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target:
self, action: #selector(PageOneViewController.dismissKeyboard))
toolBar.setItems([doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
// Makes Toolbar Work for Text Fields
familyPlansText.inputAccessoryView = toolBar
kidsOptionText.inputAccessoryView = toolBar
ethnicityText.inputAccessoryView = toolBar
}
并确保调用createToolbar()即可!
答案 3 :(得分:0)
struct ContentView: View {
var colors = ["Red", "Green", "Blue"]
@State private var selectedColor = 0
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $selectedColor, label: Text("Color")) {
ForEach(0 ..< colors.count) {
Text(self.colors[$0])
}
}
}
}
}
}
}
这具有某些特定于表单的选择器行为,它可以内联打开,而无需隐藏按钮。