首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swiftui多选取器最小最大更改选择

问Swiftui多选取器最小最大更改选择
EN

Stack Overflow用户
提问于 2020-07-17 01:31:59
回答 1查看 171关注 0票数 0

嗨,我有一个带有最小值和最大值的多选取器,如果用户将最小值放在最大值上,我想要将最小值的选择设置为最大值,这样用户就不能使用最小值而不是最大值。但我不知道如何在会话期间更改选择器的选择。

代码语言:javascript
复制
 struct MultiPicker: View  {

     typealias Label = String
     typealias Entry = String

     let data: [ (Label, [Entry]) ]
    @Binding var selection: [Entry]

     var body: some View {
         GeometryReader { geometry in
             HStack {
                 ForEach(0..<self.data.count) { column in
                     Picker(self.data[column].0, selection: self.$selection[column]) {
                         ForEach(0..<self.data[column].1.count) { row in
                             Text(verbatim: self.data[column].1[row])
                             .tag(self.data[column].1[row])
                         }
                     }
                     .pickerStyle(WheelPickerStyle())
                     .frame(width: geometry.size.width / CGFloat(self.data.count), height: geometry.size.height)
                     .clipped()
                 }
             }
         }
     }
 }


 struct MultiPickerView: View {

     @State var data: [(String, [String])] = [
         ("Min", Array(1...30).map { "\($0)" }),
         ("Max", Array(2...60).map { "\($0)" })
     ]
    @State var selection: [String] = [3, 10].map { "\($0)" }
        

     var body: some View {
         VStack(alignment: .center) {
             Text(verbatim: "Selection: \(selection)")
                
                    
            HStack {
                Text(data[0].0)
                .frame(maxWidth: .infinity, alignment: .center)
                Text(data[1].0)
                .frame(maxWidth: .infinity, alignment: .center)
            }
             MultiPicker(data: data, selection: $selection).frame(height: 300)
           
         }
     }

 }

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-18 05:41:04

我已经解决了这个问题:

代码语言:javascript
复制
 MultiPicker(data: data, selection: $selection).frame(height: 300)
 .onReceive([self.selection].publisher.first()) { _ in
                            self.correctMinMaxDays()
                        }

private func correctMinMaxDays() {
        withAnimation {
            if Int(selection[0])! > Int(selection[1])! {
                selection[0] = selection[1]
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62940364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档