开发者社区> 问答> 正文

在导航回视图时更新SwiftUI选择器最小和最大

我正在开发一个使用选择器的SwiftUI应用程序。我有6个选择,我希望能够设置最小和最大值。我有一个单独的观点与步进者设置的最小和最大的每一个采摘者。所有变量都存储在环境中。现在,当从“设置”视图导航回主视图时,选择器不会更新。他们不会改变,直到你移动采摘者。是否有一种方法在视图向后导航时必须选择最小值和最大值,而不是必须首先移动选择器?这是我的一个选择者的例子:```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)")})

展开
收起
游客5akardh5cojhg 2019-12-04 12:58:49 530 0
1 条回答
写回答
取消 提交回答
  • 当需要实时更改选择器范围时,可以考虑.id()。下面的示例可以解决这个特定问题。它可能涉及到实际复杂情况下的其他情况,如数据绑定。但那是另一个故事。``` 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)")})
                        }}
    
                }
    
    2019-12-04 13:01:17
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载