UIDatePicker с 2 текстовыми полями (от / до даты) не может установить правильную дату в текстовом поле "до" - PullRequest
0 голосов
/ 23 марта 2012

У меня есть один DatePicker.Я хочу, чтобы пользователь выбрал дату и время в текстовом поле «Von» (которое начинается завтра в 9 утра), а затем текстовое поле «bis» до (которое начинается через 1,5 часа).

все работает нормально.но когда я нажимаю на текстовое поле "фон".мой указатель даты выбрал себе правильное время.

Вот несколько снимков экрана: от текстового поля , до текстового поля

ViewDidLoad:

NSDate *today = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [gregorian setLocale:[NSLocale currentLocale]];

    NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit|NSMonthCalendarUnit| NSWeekdayCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];


    [nowComponents setWeek: [nowComponents week]]; 
    [nowComponents setDay:[nowComponents day]+1];
    [nowComponents setHour:9]; 
    [nowComponents setMinute:0];
    [nowComponents setSecond:0];

    today = [gregorian dateFromComponents:nowComponents];

    NSDate *tomorrowat9am = [gregorian dateFromComponents:nowComponents];
    //DatePicker wird erstellt

    self.thePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 152, 325, 300)];
    self.thePicker.datePickerMode = UIDatePickerModeDateAndTime;
    [thePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];



    //starts from tomorrow at 9 am
    NSDate *pickereinstelldate= tomorrowat9am;

    [self.thePicker setDate:pickereinstelldate];

    //set the right format
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd.MM.yyyy  HH:mm"];
    NSString *datum =[dateFormatter stringFromDate:self.thePicker.date];


 //set the date at textfield "bis" to 1.5 hours later

    NSDate *neuesdatum = [beginningOfWeek dateByAddingTimeInterval:3600*1.5];         NSString *neuesd = [dateFormatter stringFromDate:neuesdatum];


    //set the textfield with the new date
    tfVon.text=datum;
    tfBis.text=neuesd;

    [self.view addSubview:thePicker];
    self.thePicker.hidden=YES;
    tfVon.inputView=thePicker;
     tfBis.inputView=thePicker;
}

вот действие:

-(IBAction)dateChanged
{
    self.date = [thePicker date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd.MM.yyyy  HH:mm"];
    NSString *datum =[dateFormatter stringFromDate:self.date];
    NSDate *neuesdatum = [date dateByAddingTimeInterval:3600*1.5];
    NSString *neuesd = [dateFormatter stringFromDate:neuesdatum];

   //when i click on "Von" textfield
    if (dateBOOL==YES)

    {
        tfVon.text=datum;

        tfBis.text=neuesd;

    }
    //when i click on "bis" textfield
    if (dateBOOL==NO) {
        tfBis.text=neuesd;

        }    

}

вот где я установил для моего datebool значение no:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{


    if (textField==tfVon)
    {

        dateBOOL=YES;
        self.thePicker.hidden=NO;

        return YES;
    }
    if (textField==tfBis)
    {

        dateBOOL=NO;
        self.thePicker.hidden=NO;
        return YES;
    }

    }
return YES;

}

1 Ответ

0 голосов
/ 23 марта 2012

Последний опубликованный вами метод никогда не дойдет до последнего. Верните ДА. У вас есть дополнительные}.

"Мой указатель даты выбрал себе правильное время." Ваш вопрос не совсем понятен, но из того, что я понял, вы пытаетесь установить правильное время выбора даты после выбора текстового поля "bis".

[datePicker setDate: neuesdatum animated: NO];

Если вы пытаетесь установить текстовое поле bis на новую дату, вы должны снова использовать dateformatter и установить текстовое поле на эту новую дату.

Какое значение дает вам следующая строка (neuesd) в данный момент? NSString * neuesd = [dateFormatter stringFromDate: neuesdatum];

...