2013-05-01 38 views
1

在日期選擇我已設置的最小和最大時間,其中的UIDatePicker可以滾動,比如我有設置下午3點00分的最少時間至8:00 PM作爲最大時間最短顯示爲默認的UIDatePicker每次,當我運行該應用程序我希望datepicker顯示最小時間不是設備的當前時間。我在我的項目中硬編碼UIDatepicker沒有在xib文件中使用。我設置了最短時間,但是當我從control.tag == 1切換到2時,最小時間更改以及第一次打開應用程序時,datepicker不會從最短時間開始。如何設置

UPDATE:

-(IBAction)notificationButtonChanged:(UIButton *)control 
{ 

    if (control.tag == 1) 
    { 
     self.selectedButton = control.tag; 

     [userTimePicker reloadInputViews]; 

     [components setHour:7];; 
     [components setMinute:00]; 

     NSDate *date1 = [gregorian dateFromComponents:components]; 

     [components setHour:11]; 
     [components setMinute:00]; 

     NSDate *date2 = [gregorian dateFromComponents:components]; 

     [userTimePicker setDatePickerMode:UIDatePickerModeTime]; 

     [userTimePicker setMinimumDate:date1]; 
     [userTimePicker setMaximumDate:date2]; 

    } 

    if (control.tag == 2) 
    { 
     self.selectedButton = control.tag; 

     [userTimePicker reloadInputViews]; 

     [components setHour:12]; 
     [components setMinute:00]; 

     NSDate *date1 = [gregorian dateFromComponents:components]; 

     [components setHour:17]; 
     [components setMinute:00]; 

     NSDate *date2 = [gregorian dateFromComponents:components]; 

     [userTimePicker setDatePickerMode:UIDatePickerModeTime]; 

     [userTimePicker setMinimumDate:date1]; 
     [userTimePicker setMaximumDate:date2]; 

    } 

} 

回答

9

編輯:

int startHour = 7; 
int endHour = 11; 

NSDate *date1 = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date1]; 
[components setHour: startHour]; 
[components setMinute: 0]; 
[components setSecond: 0]; 
NSDate *startDate = [gregorian dateFromComponents: components]; 

[components setHour: endHour]; 
[components setMinute: 0]; 
[components setSecond: 0]; 
NSDate *endDate = [gregorian dateFromComponents: components]; 

[userTimePicker setDatePickerMode:UIDatePickerModeTime]; 
[userTimePicker setMinimumDate:startDate]; 
[userTimePicker setMaximumDate:endDate]; 
[userTimePicker setDate:startDate animated:YES]; 
[userTimePicker reloadInputViews]; 
+0

我已經加了我的代碼 – raptor 2013-05-01 17:01:46

+0

你是問如何把例如到您的代碼? – sangony 2013-05-01 17:08:56

+0

我已經設置了日期,但日期選擇犯規啓動/顯示的最小時間 – raptor 2013-05-01 17:10:25

1
datePickerObj = [[UIDatePicker alloc] initWithFrame:CGRectMake(10, 100, 300, 160)]; 
datePickerObj.datePickerMode = UIDatePickerModeTime; 
datePickerObj.backgroundColor = [UIColor clearColor]; 
[datePickerObj addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 

傳遞字符串到方法和格式日期...

​​

時更改選擇器,將其轉換時間到UTC + 00:00,但它顯示時間到你的時區,例如。印度,它將UTC + 05:30添加到時間。如果有任何問題時區設置時區爲NSDateFormatter

-(void)onDatePickerValueChanged:(UIDatePicker *)datePicker 
{ 
    NSDateFormatter *dformat = [[NSDateFormatter alloc]init]; 
    [dformat setDateFormat:@"hh:mm a"]; 

    NSLog(@"%@",datePicker.date); // 2000-01-01 11:30:00 +0000 
    [newStartBtn setTitle:[dformat stringFromDate:datePicker.date] forState:UIControlStateNormal]; 
    //"05:00 PM"; 
} 
1

爲SWIFT版本:

let startHour: Int = 6 
let endHour: Int = 23 
let date1: NSDate = NSDate() 
let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
let components: NSDateComponents = gregorian.components(([.Day, .Month, .Year]), fromDate: date1) 
components.hour = startHour 
components.minute = 0 
components.second = 0 
let startDate: NSDate = gregorian.dateFromComponents(components)! 
components.hour = endHour 
components.minute = 0 
components.second = 0 
let endDate: NSDate = gregorian.dateFromComponents(components)! 
datePicker.datePickerMode = .Time 
datePicker.minimumDate = startDate 
datePicker.maximumDate = endDate 
datePicker.setDate(startDate, animated: true) 
datePicker.reloadInputViews() 
0

更新了斯威夫特3:

 let startHour: Int = 6 
     let endHour: Int = 23 
     let date1: NSDate = NSDate() 
     let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! 

     let components: NSDateComponents = gregorian.components(([.day, .month, .year]), from: date1 as Date) as NSDateComponents 
     components.hour = startHour 
     components.minute = 0 
     components.second = 0 
     let startDate: NSDate = gregorian.date(from: components as DateComponents)! as NSDate 

     components.hour = endHour 
     components.minute = 0 
     components.second = 0 
     let endDate: NSDate = gregorian.date(from: components as DateComponents)! as NSDate 

     timePicker.datePickerMode = .time 
     timePicker.minimumDate = startDate as Date 
     timePicker.maximumDate = endDate as Date 
     timePicker.setDate(startDate as Date, animated: true) 
     timePicker.reloadInputViews() 
     timePicker.frame = CGRect(x: 0.0, y: (self.view.frame.height/2 + 60), width: self.view.frame.width, height: 150.0) 
     timePicker.backgroundColor = UIColor.white 
//  timePicker.reloadInputViews() 
     self.view.addSubview(timePicker) 
     timePicker.addTarget(self, action: #selector(RoundTripViewController.startTimeDiveChanged), for: UIControlEvents.valueChanged)