2016-07-12 8 views
3

DatePickerで最大時間と最小時間を設定しようとしています。私は最小限に抑えられましたが、最大限には解決できません。ここで私はこれまで持っているものです。SWIFT 2.2 DatePickerの最小時間と最大時間

let startHour: Int = 8 
    let endHour: Int = 22 
    let date1: NSDate = NSDate() 
    let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let components: NSDateComponents = gregorian.components(([.Day, .Month, .Year, .Hour, .Minute]), fromDate: date1) 

    if components.hour >= 22 && components.hour < 8 { 
     components.hour = startHour 
     components.minute = 0 
     components.second = 0 
    } 

    let startDate: NSDate = gregorian.dateFromComponents(components)! 

    components.hour = endHour 
    components.minute = 0 

    let endDate: NSDate = gregorian.dateFromComponents(components)! 

    picker.datePickerMode = .DateAndTime 
    picker.minimumDate = startDate 
    picker.maximumDate = endDate 
    picker.setDate(startDate, animated: true) 

は(今私の現在の日付である)方法.maximumDateに現在の日と月を無視する方法はありますか?私の選んだ未来の日付を現在の日付に戻し、午前8時〜午後10時に設定された時間間隔のみをチェックします。私は、DatePickerが今日の午前8時から午後10時までのピッキング時間を、将来の日ごとに有効にしたいと思っています。

+0

[特定の時刻からのUIDatePickerの日付の制限]の可能な複製。入力DOBを制限された年齢制限など](http://stackoverflow.com/questions/31418218/limiting-uidatepicker-dates-from-a-particular-time-such-as-input-dob-to-a-restr ) –

+0

その解決策は私の例に合っていません。それは私が日付の範囲を拡大することができますが、私は午後10時から午前8時までの時間を選ぶことができます。これは私が望むものではありません。 –

答えて

2

picker.maximumDate = endDateを削除し、独自のカスタム検証方法を作成してください。

// Call datePickerChanged method when the picker finishes rotating 
picker.addTarget(self, action: #selector(datePickerChanged(_:)), forControlEvents: .ValueChanged) 

func datePickerChanged(picker: UIDatePicker) { 
    let selectedDate = picker.date 
    // 1) if selectedDate's hour > than your endHour (10pm) 
    // 2) create yourNewDate with endHour = 10pm 
    // 3) set new date with animation 
    picker.setDate(yourNewDate, animated: true) 
} 
関連する問題