Objective C: 开始日期和结束日期 UIDatePicker
Objective C: Begin date and end date UIDatePicker
我有两个UIDatePickers
和两个UITextField
。
一个 UIDatePicker
和 textField
显示开始日期 + 时间。
第二个 UIDatePicker
和 textField
显示结束日期+时间。
我面临的问题是我需要连接这两个 DatePickers
以便结束日期不能超过开始日期 + 时间。此外,开始日期和结束日期 + 时间之间不能超过 24 小时。我需要做什么才能实现这一目标?如果可能的话,我如何连接这两个 UIDatePicker
,并防止日期和时间相互超过?
我的 UIDatePicker
在 textField
被点击时弹出(而不是键盘)。
我还在学习中,请多多包涵。我正在尽力去理解。
在有人告诉我这个 post 已经存在之前,它不存在,这不是我希望我的 UIDatePicker
工作的方式。 (请将我的代码与他们的代码进行比较,这是不同的)
我的 UIDatePicker
代码是:
.h 文件:
@
interface TaakToevoegen : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate, UITextViewDelegate>{
UIDatePicker *beginTijdPicker;
UIDatePicker *eindTijdPicker;
}
//TextField for both begindate and enddate.
@property (strong, nonatomic) IBOutlet UITextField *beginTijdTextField;
@property (strong, nonatomic) IBOutlet UITextField *eindTijdTextField;
.m 文件:
beginTijdPicker=[[UIDatePicker alloc] init];
beginTijdPicker.datePickerMode=UIDatePickerModeDateAndTime;
//Sets time to 24hour notation instead of AM & PM
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[beginTijdPicker setLocale:locale];
[self.beginTijdTextField setInputView:beginTijdPicker];
UIToolbar *toolBar=[[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 44)];
[toolBar setTintColor:[UIColor grayColor]];
UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(ShowSelectedDate1)];
UIBarButtonItem *space= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
[toolBar setItems:[NSArray arrayWithObjects:space, doneBtn, nil]];
[self.beginTijdTextField setInputAccessoryView:toolBar];
-(void)ShowSelectedDate1{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd MMM HH:mm"];
self.beginTijdTextField.text=[NSString stringWithFormat:@"%@", [formatter stringFromDate:beginTijdPicker.date]];
[self.beginTijdTextField resignFirstResponder];
}
结束日期(与开始日期相同但名称不同):
eindTijdPicker=[[UIDatePicker alloc] init];
eindTijdPicker.datePickerMode=UIDatePickerModeDateAndTime;
//Sets time to 24hour notation instead of AM & PM
NSLocale *locale1 = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[eindTijdPicker setLocale:locale1];
[self.eindTijdTextField setInputView:eindTijdPicker];
UIToolbar *toolBar1=[[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 44)];
[toolBar1 setTintColor:[UIColor grayColor]];
UIBarButtonItem *doneBtn1=[[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(ShowSelectedDate2)];
UIBarButtonItem *space1= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
[toolBar1 setItems:[NSArray arrayWithObjects:space1, doneBtn1, nil]];
[self.eindTijdTextField setInputAccessoryView:toolBar1];
-(void)ShowSelectedDate2{
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"dd MMM HH:mm"];
self.eindTijdTextField.text=[NSString stringWithFormat:@"%@", [formatter1 stringFromDate:eindTijdPicker.date]];
[self.eindTijdTextField resignFirstResponder];
}
在 [self.beginTijdTextField setInputView:beginTijdPicker];
之后添加:
[self.beginTijdTextField addTarget:self action:@selector(beginTijdDidChange) forControlEvents:UIControlEventEditingChanged];
并添加此方法
-(void)beginTijdDidChange
{
int oneDay = 1;
NSDate *maxDateFromBeginig = [beginTijdPicker.date dateByAddingTimeInterval:60*60*24*oneDay]; //24h + beginDate
NSDate *minDateFromBeginig = [NSDate dateWithTimeInterval:1.0 sinceDate:beginTijdPicker.date]; //1 sec + beginDate
eindTijdPicker.maximumDate = maxDateFromBeginig;
eindTijdPicker.minimumDate = minDateFromBeginig;
}
嗯!您可以将最大日期和最小日期设置为第二个 UIDatePicker。
[datePicker setMinimumDate:minDate]; //minDate should be first date picker's date
[datePicker setMaximumDate:maxDate]; //maxDate should be 24 hrs grater than the minDate.
除了已经解决的问题之外,UI 似乎有点令人费解。如果知道一个时间必须在另一个时间之后 0-24 小时,为什么不让用户选择那个时间,即开始日期时间和 0-24 小时时间间隔作为选择器,然后将结束日期计算为开始 +间隔?对我来说似乎更容易使用。
我有两个UIDatePickers
和两个UITextField
。
一个 UIDatePicker
和 textField
显示开始日期 + 时间。
第二个 UIDatePicker
和 textField
显示结束日期+时间。
我面临的问题是我需要连接这两个 DatePickers
以便结束日期不能超过开始日期 + 时间。此外,开始日期和结束日期 + 时间之间不能超过 24 小时。我需要做什么才能实现这一目标?如果可能的话,我如何连接这两个 UIDatePicker
,并防止日期和时间相互超过?
我的 UIDatePicker
在 textField
被点击时弹出(而不是键盘)。
我还在学习中,请多多包涵。我正在尽力去理解。
在有人告诉我这个 post 已经存在之前,它不存在,这不是我希望我的 UIDatePicker
工作的方式。 (请将我的代码与他们的代码进行比较,这是不同的)
我的 UIDatePicker
代码是:
.h 文件:
@
interface TaakToevoegen : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate, UITextViewDelegate>{
UIDatePicker *beginTijdPicker;
UIDatePicker *eindTijdPicker;
}
//TextField for both begindate and enddate.
@property (strong, nonatomic) IBOutlet UITextField *beginTijdTextField;
@property (strong, nonatomic) IBOutlet UITextField *eindTijdTextField;
.m 文件:
beginTijdPicker=[[UIDatePicker alloc] init];
beginTijdPicker.datePickerMode=UIDatePickerModeDateAndTime;
//Sets time to 24hour notation instead of AM & PM
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[beginTijdPicker setLocale:locale];
[self.beginTijdTextField setInputView:beginTijdPicker];
UIToolbar *toolBar=[[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 44)];
[toolBar setTintColor:[UIColor grayColor]];
UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(ShowSelectedDate1)];
UIBarButtonItem *space= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
[toolBar setItems:[NSArray arrayWithObjects:space, doneBtn, nil]];
[self.beginTijdTextField setInputAccessoryView:toolBar];
-(void)ShowSelectedDate1{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd MMM HH:mm"];
self.beginTijdTextField.text=[NSString stringWithFormat:@"%@", [formatter stringFromDate:beginTijdPicker.date]];
[self.beginTijdTextField resignFirstResponder];
}
结束日期(与开始日期相同但名称不同):
eindTijdPicker=[[UIDatePicker alloc] init];
eindTijdPicker.datePickerMode=UIDatePickerModeDateAndTime;
//Sets time to 24hour notation instead of AM & PM
NSLocale *locale1 = [[NSLocale alloc] initWithLocaleIdentifier:@"NL"];
[eindTijdPicker setLocale:locale1];
[self.eindTijdTextField setInputView:eindTijdPicker];
UIToolbar *toolBar1=[[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 44)];
[toolBar1 setTintColor:[UIColor grayColor]];
UIBarButtonItem *doneBtn1=[[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(ShowSelectedDate2)];
UIBarButtonItem *space1= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
[toolBar1 setItems:[NSArray arrayWithObjects:space1, doneBtn1, nil]];
[self.eindTijdTextField setInputAccessoryView:toolBar1];
-(void)ShowSelectedDate2{
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"dd MMM HH:mm"];
self.eindTijdTextField.text=[NSString stringWithFormat:@"%@", [formatter1 stringFromDate:eindTijdPicker.date]];
[self.eindTijdTextField resignFirstResponder];
}
在 [self.beginTijdTextField setInputView:beginTijdPicker];
之后添加:
[self.beginTijdTextField addTarget:self action:@selector(beginTijdDidChange) forControlEvents:UIControlEventEditingChanged];
并添加此方法
-(void)beginTijdDidChange
{
int oneDay = 1;
NSDate *maxDateFromBeginig = [beginTijdPicker.date dateByAddingTimeInterval:60*60*24*oneDay]; //24h + beginDate
NSDate *minDateFromBeginig = [NSDate dateWithTimeInterval:1.0 sinceDate:beginTijdPicker.date]; //1 sec + beginDate
eindTijdPicker.maximumDate = maxDateFromBeginig;
eindTijdPicker.minimumDate = minDateFromBeginig;
}
嗯!您可以将最大日期和最小日期设置为第二个 UIDatePicker。
[datePicker setMinimumDate:minDate]; //minDate should be first date picker's date
[datePicker setMaximumDate:maxDate]; //maxDate should be 24 hrs grater than the minDate.
除了已经解决的问题之外,UI 似乎有点令人费解。如果知道一个时间必须在另一个时间之后 0-24 小时,为什么不让用户选择那个时间,即开始日期时间和 0-24 小时时间间隔作为选择器,然后将结束日期计算为开始 +间隔?对我来说似乎更容易使用。