Вопрос по ios, iphone, objective-c, uidatepicker – Как установить минимальное время для отображения по умолчанию в UIDatepicker каждый раз

1

В DatePicker я установил минимальное и максимальное время, когда uidatepicker может прокручивать, например, я установил 3:00 PM как минимальное время и 8:00 PM как максимальное время, когда я запускаю приложение, я хочу, чтобы DatePicker отображал минимальное время, а не текущее время устройства. Я жестко запрограммировал UIDatepicker в моем проекте, не использованном в xib-файле. Я установил минимальное время, но когда я переключаюсь с control.tag == 1 на 2, меняется минимальное время, а также, когда я открываю приложение в первый раз, средство выбора даты не запускается с минимального времени.

ОБНОВИТЬ :

-(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];

    }

}

Ваш Ответ

5   ответов
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];

Передать строку в метод и формат на сегодняшний день ...

-(void)Set_MinimumDate_ToDatePicker:(NSString*)Time //  "start_time" = "3:00PM";
{
    NSDateFormatter *dformat = [[NSDateFormatter alloc]init];
    [dformat setDateFormat:@"hh:mma"];

    [datePickerObj setMinimumDate:[dformat dateFromString:Time]];
    [datePickerObj setDate:[dformat dateFromString:Time] animated:YES];
    [datePickerObj reloadInputViews];
}

При изменении выбора, он конвертирует время в UTC + 00: 00, но отображает время в вашем часовом поясе, например. Индия, это добавляет UTC + 05:30 к времени. Если возникла проблема с TimeZone, установите TimeZone на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";
 }
3

Для версии 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()
10

РЕДАКТИРОВАТЬ:

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];
я добавил свой код raptor
Вы спрашиваете, как включить пример в свой код? sangony
Я установил дату, но DatePicker не запускается / не отображается минимальное время raptor
..в моем коде я установил минимальное время как `[userTimePicker setMinimumDate: date1];` ... но средство выбора даты не начинается с него, когда я запускаю приложение raptor
Приведенный выше код, который я разместил, позволяет вам установить часы, минуты и секунды. Например, если ваше минимальное время 8, тогда setHour: 8 setMinute: 0 setSecond: 0 sangony
3

Обновлено для Swift 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)
2

setDate:animated: метод, который можно использовать для установки даты на любую дату / время, которое вы хотите в экземпляре выбора даты.

Больше информации:http://developer.apple.com/library/ios/documentation/uikit/reference/UIDatePicker_Class/Reference/UIDatePicker.html#//apple_ref/doc/uid/TP40006806-CH3-SW1

Похожие вопросы