【问题标题】:Limiting UIDatePicker dates from a particular time. Such as Input DOB to a restricted age limit从特定时间限制 UIDatePicker 日期。例如输入 DOB 到有限制的年龄限制
【发布时间】: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

【问题讨论】:

    标签: xcode swift nsdate uidatepicker


    【解决方案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 之外,您可以尝试任何您想要的东西,但您将无法修复它。如果要描述超过一小时的相对时间跨度,则不能使用秒。使用适当的日历,您无法考虑夏令时、闰年或跳过的日子(至少有一个国家最近跳过了一整天)。
      猜你喜欢
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多