从特定时间限制 UIDatePicker 日期。例如输入 DOB 到有限制的年龄限制

Posted

技术标签:

【中文标题】从特定时间限制 UIDatePicker 日期。例如输入 DOB 到有限制的年龄限制【英文标题】:Limiting UIDatePicker dates from a particular time. Such as Input DOB to a restricted age limit 【发布时间】:2015-10-03 18:35:20 【问题描述】:

在我的代码中,我有一个 UITextField,当用户点击它时会打开一个 UIDatePicker 以使用户能够轻松有效地滚动到他们的出生日期。显然,我们不希望 UIDatePicker 像当前那样滚动到 2015 年及以上。由于它是出生日期输入字段,我还需要能够将条目限制为 16 岁以上。我该怎么做呢?

class SignUpViewController: UIViewController, UITextFieldDelegate 

    var datePicker:UIDatePicker!

    @IBOutlet weak var dateTextField: UITextField!

    override func viewDidLoad() 
        super.viewDidLoad()

        // UI DATE PICKER SETUP

        var customView:UIView = UIView(frame: CGRectMake(0, 100, 320, 160))
        customView.backgroundColor = UIColor.clearColor()

        datePicker = UIDatePicker(frame: CGRectMake(0, 0, 320, 160))
        datePicker.datePickerMode = UIDatePickerMode.Date

        customView.addSubview(datePicker)
        dateTextField.inputView = customView
        var doneButton:UIButton = UIButton (frame: CGRectMake(100, 100, 100, 44))
        doneButton.setTitle("Done", forState: UIControlState.Normal)
        doneButton.addTarget(self, action: "datePickerSelected", forControlEvents: UIControlEvents.TouchUpInside)
        doneButton.backgroundColor = UIColor .grayColor()
        dateTextField.inputAccessoryView = doneButton

【问题讨论】:

【参考方案1】:

您可以使用 dateByAddingUnit 并从当前日期减去 16 年来设置 datePicker 的最大日期,如下所示:

datePicker.maximumDate = NSCalendar.currentCalendar().dateByAddingUnit(.Year, value: -16, toDate: NSDate(), options: [])

Xcode 10.2.1 • Swift 5

datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: -16, to: Date())

【讨论】:

【参考方案2】:

UIDatePicker 有一个可以设置的maximumDate。只需在 IB 中将模式设置为“日期”并添加: datePicker.maximumDate = NSDate(timeIntervalSinceNow: -504911232)

-504911232 表示今天之前的 16 年(会计闰年)

【讨论】:

不,不是那个意思。 504489600 是 15 年 11 个月 25 天。提示:闰年。这就是为什么你不用秒来计算日期。 将其更改为考虑大约 4 个闰日 除了重新发明 NSCalendar 之外,您可以尝试任何您想要的东西,但您将无法修复它。如果要描述超过一小时的相对时间跨度,则不能使用秒。使用适当的日历,您无法考虑夏令时、闰年或跳过的日子(至少有一个国家最近跳过了一整天)。

以上是关于从特定时间限制 UIDatePicker 日期。例如输入 DOB 到有限制的年龄限制的主要内容,如果未能解决你的问题,请参考以下文章

从 UIDatePicker 获取日期(没有时间)

如何将 UIDatePicker 更改为特定时间(在代码中)

如何使用相同的 UIDatePicker 分别在 2 UITextField 中获取日期和时间

如何从UIDatepicker中快速编辑用户的日期和时间选择器?

从 UITextField 单击事件 MonoTouch 在 UIDatePicker 中选择日期

iOS Swift 3 - UIDatePicker