Как отключить UIDatePicker после выбора даты? - PullRequest
2 голосов
/ 21 июня 2011

Я использую следующий код для UIDatePicker, независимо от того, какую дату я выбрал, она отображается в метке. Но мне нужно закрыть сборщик после выбора даты. Возможно ли это, пожалуйста, предложите мне.

Я использую следующий код:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Create label
    label = [[UILabel alloc] init]; 
    label.frame = CGRectMake(10, 10, 300, 40);
    label.textAlignment = UITextAlignmentCenter;

    //Use NSDateFormatter to write out the date in a friendly format
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:[NSDate date]]];
    [df release];
    [self.view addSubview:label]; 
    [label release];

    // Initialization code
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 250)];
    datePicker.datePickerMode = UIDatePickerModeDate;
    datePicker.hidden = NO;
    datePicker.date = [NSDate date];
    [datePicker addTarget:self
                   action:@selector(changeDateInLabel:)
         forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:datePicker];
    [datePicker release];
}

- (void)changeDateInLabel:(id)sender{
    //Use NSDateFormatter to write out the date in a friendly format
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:datePicker.date]];
    [df release];
}   

Ответы [ 4 ]

9 голосов
/ 13 сентября 2013

Я рекомендую вам сделать что-то вроде этого:

enter image description here

для использования панели инструментов с кнопкой «Готово» и, возможно, кнопкой «Отмена» ...

Это просто быстрая реализация, это может помочь

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, 320, 44)];
textField.text         = @"Date";
[self.view addSubview:textField];

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolbar.barStyle   = UIBarStyleBlackTranslucent;

UIBarButtonItem *itemDone  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)];
UIBarButtonItem *itemSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

toolbar.items = @[itemSpace,itemDone];

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)];
datePicker.minimumDate   = [NSDate date];
datePicker.date          = [NSDate date];
[datePicker addTarget:self action:@selector(didChangePickerDate:) forControlEvents:UIControlEventValueChanged];

textField.inputAccessoryView = toolbar;
textField.inputView          = datePicker;

[textField becomeFirstResponder];
3 голосов
/ 06 декабря 2011

Вы должны использовать кнопку для нажатия на фон, чтобы скрыть DATEPICKER от вашего взгляда.

-(IBAction)backGroundClick:(id)sender
{
    [datePicker removeFromSuperview];
}
2 голосов
/ 09 сентября 2013

Возможно, лучше, чем удаление из суперпредставления, установит для userInteraction значение NO
, и вам понадобится кнопка «сделано», когда пользователь готов закончить выбор даты

-(IBAction)buttonDoneClick:(id)sender
{
    [datePicker setUserInteractionEnabled:NO];
}
0 голосов
/ 09 сентября 2013

Следующий код будет работать. Нажатие на метку даты активирует DatePicker следующим образом:

- (void)viewDidLoad
{
    [super viewDidLoad];


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]init];
    tap.numberOfTapsRequired = 1;

    label = [[UILabel alloc] init];
    label.frame = CGRectMake(10, 20, 300, 40);
    label.userInteractionEnabled = YES;
    label.textAlignment = NSTextAlignmentCenter;
    label.backgroundColor = [UIColor redColor];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:[NSDate date]]];
    [label addGestureRecognizer:tap];
    [tap addTarget:self action:@selector(datePickerView)];

    [self.view addSubview:label];


}

- (void)datePickerView
{
    // Initialization code
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 250)];
    datePicker.datePickerMode = UIDatePickerModeDate;
    datePicker.hidden = NO;
    datePicker.date = [NSDate date];
    [self.view addSubview:datePicker];
    [datePicker addTarget:self
                   action:@selector(changeDateInLabel:)
         forControlEvents:UIControlEventValueChanged];
}


- (void)changeDateInLabel:(id)sender{
    //Use NSDateFormatter to write out the date in a friendly format
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    label.text = [NSString stringWithFormat:@"%@",
                  [df stringFromDate:datePicker.date]];

}

и при использовании следующего метода сборщик будет отклонен от просмотра при нажатии вне сборщика.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [datePicker removeFromSuperview];
}
...