我正在使用UIPickerView来显示可供选择的时间,这个时间要从00:00到23:00,但是我显然做错了,因为我的时间是11:58到10:58。这就是我在做的事情:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *dateComponents = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:[NSDate date]];
[dateComponents setHour:row];
[dateComponents setMinute:0];
[dateComponents setSecond:0];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
return [dateFormatter stringFromDate:[calendar dateFromComponents:dateComponents]];
}
任何帮助都会非常感激。
谢谢, 尼克
答案 0 :(得分:1)
我看不出有任何理由在您的选择器委托方法中使用日期格式化程序。一天中的小时数和分钟数是固定的。为什么不向用户提供一个两列选择器,在另一个中提供一小时和几分钟的小时。
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [NSString stringWithFormat:@"%02d", row];
}
以下是您的选择器数据源方法的样子。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
// Two picker columns, one for hours, one for minutes
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
switch (component) {
case 0:
return 24;
case 1:
return 60:
}
}
然后,当您的用户完成选择时,请根据他们选择的内容构建日期。
- (IBAction)didTapDonePickingButton:(id)sender
{
NSInteger hour = [_pickerView selectedRowInComponent:0];
NSInteger minute = [_pickerView selectedRowInComponent:1];
// Build out your date here...
}
更好,您是否知道可以在界面构建器中使用UIDatePicker并将其模式设置为“Time”。
这会给你几小时和几分钟。像这样:
答案 1 :(得分:0)
@Larme给了我所需的答案(为NSDateFormatter设置时区)。