2013-05-01 39 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)