设置连续轮选择器 - SwiftUI

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于设置连续轮选择器 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 从 CoreData 设置初始选择器值

SwiftUI:如何设置时间选择器的范围以包含午夜?

SwiftUI:将选取器选择设置为动态数组中的最后一个

如何在swiftui中使用选择器更改文本大小

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

SwiftUI 多组件选择器