ios - 导航回 View 时更新 SwiftUI 选择器的最小值和最大值

标签 ios swift swiftui picker

我正在开发一个使用选择器的 SwiftUI 应用程序。我有 6 个选择器,我希望能够为其设置 minimummaximum 值。我有一个带有 steppers 的单独 View ,用于设置每个 pickerminimummaximum。所有变量都存储在环境中。现在,当从设置 View 导航回主视图时,选择器不会更新。在您移动拾取器之前,它们不会更改。有没有一种方法可以在 View 导航回来时更改选择器的最小值和最大值,而不是必须先移动选择器? 这是我的一个选择器的示例:

Picker(selection: self.$ticket.pick1, label: Text("")) {
         ForEach(self.ticket.min1 ... self.ticket.max1, id: \.self) {
               Text("\($0)").frame(width: geometry.size.width / 6)
         }
}

这是最小和最大步进器之一的示例:

Text("Pick One").fontWeight(.bold)
Stepper(value: $ticket.min1, in: 1...100, label: {Text("Minimum: \(ticket.min1)")})
Stepper(value: $ticket.max1, in: 1...100, label: {Text("Maximum: \(ticket.max1)")})

最佳答案

当你需要实时改变一个picker范围时,你可以考虑.id()。下面的例子可以解决这个具体问题。在真实的复杂情况下可能会涉及到其他情况,比如数据绑定(bind)。但那是另一回事了。

struct Ticket : Hashable{
     var min1 : Int
     var max1 : Int
     var pick1 : Int
}

struct CoolPickers: View {
      @State var ticket: Ticket = Ticket(min1: 1, max1: 10, pick1: 2)

      var body: some View {
            GeometryReader { geometry in
                 NavigationView{
                      VStack{
                            NavigationLink("Next", destination: SettingPickersView(ticket: self.$ticket))
                        Picker(selection: self.$ticket.pick1, label: Text("")) {
                            ForEach(self.ticket.min1 ... self.ticket.max1, id: \.self) {
                                    Text("\($0)")
                                    .frame(width: geometry.size.width / 6)
                                }
                        }.id(self.ticket)
                      }
                 }
            }
      }
}

struct SettingPickersView: View {
       @Binding var ticket: Ticket

       var body: some View {
             Group{
                  Text("Pick One").fontWeight(.bold)
                  Stepper(value: $ticket.min1, in: 1...100, label: {Text("Minimum: \(ticket.min1)")})
                  Stepper(value: $ticket.max1, in: 1...100, label: {Text("Maximum: \(ticket.max1)")})
             }
       }
}

关于ios - 导航回 View 时更新 SwiftUI 选择器的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163472/

相关文章:

ios - libc++abi.dylib : terminating with uncaught exception of type NSException without the regular error message

ios - 如何在 Swift 中获取本地网络中本地主机名的 IP 地址

swift - 属性作为类中的函数类型

swift - 如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI、Xcode 11 Beta 5)

ios - swift 4 : prepare(for segue:) being called after viewDidLoad

ios - 将文件转换为 Swift 3 : unable to infer closure type in the current context

ios - 如何在 Swift 中将 ImageView 从左向右移动

ios - 如何将枚举数组转换为整数数组

swift - 在 TabView 中设置 SwiftUI PageTabViewStyle 垂直流向

SwiftUI:在 map View 上更改 map 类型?