2010-06-17 55 views

Trả lời

71

Không được thử nghiệm, nhưng bạn có thể muốn một cái gì đó như thế này.

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:30]; 
NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 
[comps setYear:-30]; 
NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 

[datePicker setMaximumDate:maxDate]; 
[datePicker setMinimumDate:minDate]; 
+0

Nó sẽ không gây rối nếu bạn có cột ngày và tháng không? Nó sẽ giới hạn các tháng và ngày đến ngày hiện tại, ở dạng hiện tại của nó. Giống như hôm nay là ngày 3 tháng 6 năm 2015. Sẽ ổn thôi. Ngày sẽ bị kẹt ở giá trị tối đa 3 và tháng sẽ bị kẹt ở giá trị tối đa june – NSNoob

+0

Không. Bạn chỉ đang suy đoán một cách mù quáng? – warrenm

+0

Không, tôi đã thử rằng trong một ứng dụng tôi đang làm việc và tôi phải đối mặt với vấn đề tôi đã nói với bạn. Cuối cùng tôi phải đặt séc vào ngày riêng. – NSNoob

16
m_datePicker.maximumDate = [NSDate date]; 

Bạn có thể sử dụng dòng mã này để thiết lập ngày max (Hôm nay).

+0

và làm cách nào để ẩn ngày> maximumDate? – alex

+0

Thực tế là sẽ đặt ngày tối đa thành phút chính xác mà dòng mã được thực hiện –

+0

Nó không cho phép một ngày để chọn ngày muộn hơn ngày hôm nay nhưng người dùng sẽ thấy ngày sau đó. –

1

Hãy Hãy thử mã này iOS8 +

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDate *currentDate = [NSDate date]; 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:30]; 
NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 
[comps setYear:-30]; 
NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0]; 

[datePicker setMaximumDate:maxDate]; 
[datePicker setMinimumDate:minDate]; 
3

Thích ứng với câu trả lời @ warrenm để Swift:

let currentDate = NSDate() 
let dateComponents = NSDateComponents() 
dateComponents.year = -13 
let minDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) 
dateComponents.year = 30 
let maxDate = calendar.dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0)) 


dobPicker.maximumDate = maxDate 
dobPicker.minimumDate = minDate 
1

Được nhìn vào vấn đề này ngày hôm nay và đã đưa ra một giải pháp trong Swift 3 mà kéo dài UIDatePicker.

extension UIDatePicker 
{ 
    /// set the date picker values and set min/max 
    /// - parameter date: Date to set the picker to 
    /// - parameter unit: (years, days, months, hours, minutes...) 
    /// - parameter deltaMinimum: minimum date delta in units 
    /// - parameter deltaMaximum: maximum date delta in units 
    /// - parameter animated: Whether or not to use animation for setting picker 
    func setDate(_ date:Date, unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int, animated:Bool) 
    { 
     setDate(date, animated: animated) 

     setMinMax(unit: unit, deltaMinimum: deltaMinimum, deltaMaximum: deltaMaximum) 
    } 

    /// set the min/max for the date picker (uses the pickers current date) 
    /// - parameter unit: (years, days, months, hours, minutes...) 
    /// - parameter deltaMinimum: minimum date delta in units 
    /// - parameter deltaMaximum: maximum date delta in units 
    func setMinMax(unit:NSCalendar.Unit, deltaMinimum:Int, deltaMaximum:Int) 
    { 
     if let gregorian = NSCalendar(calendarIdentifier:.gregorian) 
     { 
      if let minDate = gregorian.date(byAdding: unit, value: deltaMinimum, to: self.date) 
      { 
       minimumDate = minDate 
      } 

      if let maxDate = gregorian.date(byAdding: unit, value: deltaMaximum, to: self.date) 
      { 
       maximumDate = maxDate 
      } 
     } 
    } 
} 

Phương pháp setDate sẽ thiết lập ba giá trị (ngày, tối thiểu, tối đa) của UIDatePicker dụ.

setMinMax chỉ đặt giá trị tối thiểu và tối đa. Tối thiểu và tối đa được tính bằng ngày hiện tại của người chọn.

Đơn vị có thể là giá trị sau:

  • .năm
  • .tháng
  • .day
  • .hour
  • .minute
  • .second

Để đặt ngày bằng pl chúng tôi và trừ ba mươi năm, mã sẽ là:

var datePicker = UIDatePicker() 
var date = Date() 

datePicker.setDate(date, unit:.year, deltaMinimum:-30, deltaMaximum:30, animated:true) 
1

My phiên bản nhanh chóng 4 của @toddg là:

let currentDate = Date() 
var dateComponents = DateComponents() 
let calendar = Calendar.init(identifier: .gregorian) 
dateComponents.year = -100 
let minDate = calendar.date(byAdding: dateComponents, to: currentDate) 
dateComponents.year = -13 
let maxDate = calendar.date(byAdding: dateComponents, to: currentDate) 

Các công trình lớn đối với tôi!

Các vấn đề liên quan