【问题标题】:How do I limit the selection values of a SwiftUI DatePicker?如何限制 SwiftUI DatePicker 的选择值?
【发布时间】:2022-01-16 11:45:15
【问题描述】:

是否有人知道如何添加一个功能,例如 - 如果所选年龄

我的代码:

import SwiftUI

struct DateOfBirthView: View {
    
@ State private var birthdate = Date()
    
    var body: some View {
        VStack {
            DatePicker("date of birth", selection: $birthdate,
                       displayedComponents: [.date])
                .font(.title3)
                .padding()
                .background(RoundedRectangle(cornerRadius: 10).fill(Color.gray.opacity(0.1)))
                .padding(.top, 15)
            
            Text("you must be at least 18 to Register")
                .frame(maxWidth: .infinity, alignment: .leading)
                .padding(.leading)
            
            CustomNavLink(destination: SelectGenderView()
                .customNavigationTitle("Registration"),
                label: {
            DefaultButton (title: "continue")
                .padding(.top, 15)
            })
            
            Spacer()
            
        }
        .padding (.horizontal, 25)
    }
}

【问题讨论】:

    标签: xcode swiftui datepicker


    【解决方案1】:

    您可以将所选日期与代表第一个有效日期的日期进行比较。

    我不知道CustomNavLinkDefaultButton 的组成,你没有包括在内,所以我展示了使用Buttondisabled 来演示这个概念:

    struct DateOfBirthView: View {
        
        @State private var birthdate = Date()
        
        var dateIsValid : Bool {
            let currentDate = Date()
            var dateComponent = DateComponents()
            dateComponent.year = -18
            guard let validDate = Calendar.current.date(byAdding: dateComponent, to: currentDate) else {
                return false
            }
            return birthdate <= validDate
        }
        
        var body: some View {
            VStack {
                DatePicker("date of birth", selection: $birthdate,
                           displayedComponents: [.date])
                    .font(.title3)
                    .padding()
                    .background(RoundedRectangle(cornerRadius: 10).fill(Color.gray.opacity(0.1)))
                    .padding(.top, 15)
                
                Text("you must be at least 18 to Register")
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .padding(.leading)
                
                Button("Continue") {
                    
                }.disabled(!dateIsValid)
                
                Spacer()
                
            }
            .padding (.horizontal, 25)
        }
    }
    

    您还可以明确限制日期选择器的选择范围。 Apple's documentation 提供以下示例:

    @State private var date = Date()
    let dateRange: ClosedRange<Date> = {
        let calendar = Calendar.current
        let startComponents = DateComponents(year: 2021, month: 1, day: 1)
        let endComponents = DateComponents(year: 2021, month: 12, day: 31, hour: 23, minute: 59, second: 59)
        return calendar.date(from:startComponents)!
            ...
            calendar.date(from:endComponents)!
    }()
    
    var body: some View {
        DatePicker(
            "Start Date",
             selection: $date,
             in: dateRange,
             displayedComponents: [.date, .hourAndMinute]
        )
    }
    

    【讨论】:

    • 绝对的传奇,谢谢:)
    • 如果这对您有用,请使用绿色复选标记将其标记为正确。如果对您有帮助,您还可以使用向上箭头进行投票。
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多