2012-04-24 12 views
1

私はDatePickerを持っています。私はユーザーに "from"テキストフィールド(明日午前9時に開始)と "until"(1.5時間後に始まる)のテキストフィールドで日付と時刻を選択させたいと思っています。例については2つのテキストフィールドを持つUIDatePicker(日付から/まで)?

From TextFiledUntil TextField

。 「From」TextField:25.04.2012 09:00、「Until」TextField:25.04.2012 10:30

アップロードした写真を見てください。

これまでのところすべてうまくいきましたが、「until」テキストフィールドをクリックすると、Datepickerは正しい日付と時刻を設定しませんでした。彼は2012年4月25日9時の代わりに、2012年4月25日、これまで午前10時30

マイコード設定します。

ViewDidLoad: 

    //Create DatePicker 

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


    //Set DatePicker to Tomorrow 9:00 o'clock 

    NSDate *today = [NSDate date]; 

    NSCalendar *german = [[NSCalendar alloc]   initWithCalendarIdentifier:NSGregorianCalendar]; 

    [german setLocale:[NSLocale currentLocale]]; 
    NSDateComponents *nowComponents = [german components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSDayCalendarUnit| NSMonthCalendarUnit| NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today]; 

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

    NSDate *beginningOfWeek = [german dateFromComponents:nowComponents]; 
    NSDate *pickereinstelldate= beginningOfWeek; 

    [self.thePicker setDate:pickereinstelldate]; 


    //Set DatePicker to correct 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 *morgenDate = [beginningOfWeek dateByAddingTimeInterval:3600*1.5]; 
    NSString *newdate = [dateFormatter stringFromDate:morgenDate]; 

    //Set the until TextField with the newdate 

    tfVon.text=datum; 
    tfBis.text=newdate; 


    [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 "From" textfield 
    if (dateBOOL==YES) 

    { 
     tfVon.text=datum; 

     tfBis.text=neuesd; 

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

     }  

} 

がある私は私のdateboolを設定ありません:

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

    } 

私は正しい時刻にTextFieldの「まで」に日付ピッカーを設定することができます方法はありますか?

答えて

1

私があなたを入手した場合、選択したテキストフィールドの日付が日付選択ツールに表示されます。

textFieldShouldBeginEditingで作業しているので、この方法でもコードを投稿します(ただし、textFieldDidBeginEditingが良い選択となります)。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (textField==tfVon) 
    { 
     dateBOOL=YES; 
    } 
    else if (textField==tfBis) 
    { 
     dateBOOL=NO; 
    } 
    else 
    { 
     //?? should not happen 
    } 
    self.thePicker.hidden=NO; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"dd.MM.yyyy HH:mm"]; 
    NSDate *dateOfCurrentTextField = [dateFormatter dateFromString:textField.text]; 
    [self.picker setDate: dateOfCurrentTextField animated:YES]; 
    return YES; 
} 
+0

ご協力いただきありがとうございます。それは完全に動作します。うーん、私はtextFieldShouldBeginnEditingで試してみました。このメソッドのtypは無効なので、どのようにtextfieldDidBeginnEditingを使用できますか? – Bashud

+0

textFieldDidBeginEditingは、ユーザーが編集を開始したときに呼び出されるため、無効です。これは、テキストフィールドに許可されていることを通知することを意味します。これは、あなたが行ったようにtextFieldShouldBeginEditingの実装か、デフォルトで(もしメソッドが実装されていなければ)行うことができます。ウルインプ。 textfieldDidBeginnEditingの内容は、ur implのようになります。 textFieldShouldBeginnEditingの何も返さないことを除いて。 textFieldShouldBeginnEditingは、ユーザーが編集を許可されているかどうか、つまり、時々YESを返したり、時にはNOを返すような場合に実行時に(何らかの依存関係で)決定するプログラムのためのものです。 –

+0

ああ、説明をありがとう。今私はまた、textFieldDidBeginnEditingが良い選択だと思う!再び、あなたの助けのためにthx – Bashud

関連する問題