【问题标题】:Set continuous wheel picker - SwiftUI设置连续轮选择器 - SwiftUI
【发布时间】:2020-11-29 14:29:18
【问题描述】:

如何显示可以在选定范围内无限向上或向下滚动的选择器?就像您在 ios 设备中设置闹钟一样。现在,如果我的范围在 0 到 60 之间,我只能向上滚动直到达到 60,然后向下滚动以返回 0。我希望它是连续的,当我达到 60 时,我会重新开始循环。

【问题讨论】:

  • 只需创建大量重复内容的元素并将初始值设置为中间索引
  • 创建一个巨大的元素有什么意义?我只需要循环 0 到 60 之间的数字。想象一下赌场的轮盘赌,这些值会无限重复
  • 只要做一个大值,使用值% 60。应该很容易。
  • 我真的不明白我该怎么做,这可能很容易,但是如何让它像这样工作的代码?

标签: swift swiftui picker


【解决方案1】:

您可以简单地添加一个较大的值作为范围的上限,并将初始值设置为它的一半,然后将提示值除以 60 value % 60 得到截断的值。 要在选择器值更改时执行方法,您可以使用此 [post][1] 中显示的方法:

import SwiftUI

struct ContentView: View {
    @State private var selection = 300
    var minutes: Int { selection % 60 }
    var body: some View {
        Picker(selection: $selection, label: Text("Minutes:")) {
            ForEach(0 ..< 600) {
                Text(String(format: "%02d", $0 % 60))
            }
        }.onChange(of: selection, perform: valueChanged)
    }
    func valueChanged(_ value: Int) {
        selection = 300 + value % 60
        print("Minutes: \(minutes)")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

【讨论】:

  • 无需使用自定义扩展。您可以将onReceive 用于 SwiftUI 1 和 2,或者将 onChange 用于 SwiftUI 2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
相关资源
最近更新 更多