繁体   English   中英

目标C:开始日期和结束日期UIDatePicker

[英]Objective C: Begin date and end date UIDatePicker

我有两个UIDatePickers和两个UITextField 一个UIDatePickertextField显示开始日期和时间。 第二个UIDatePickertextField显示结束日期和时间。

我面临的问题是我需要连接两个DatePickers以便结束日期不能超过开始日期+时间。 另外,开始日期和结束日期+时间之间不能超过24小时。 为了达到这个目的,我需要做什么? 我如何连接两个UIDatePicker ,并在可能的情况下防止日期和时间彼此超出?

单击textField (而不是键盘)时,会弹出我的UIDatePicker

我还在学习,所以请忍受我。 我正在尽力去理解。 在任何人告诉我这篇文章已经存在之前,它不存在,不是我希望我的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 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小时的时间间隔,然后将结束日期计算为开始+间隔? 对我来说似乎更容易使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM