在运行时将UIDatePicker添加到UIView的问题

时间:2014-04-27 21:54:33

标签: ios objective-c cocoa-touch uidatepicker

我正在尝试在用户单击按钮时将UIDatePicker添加到UIView。我有一个动画设置,可以从底部向上滑动UIView。如果我将UIDatePicker添加到ViewControllers视图,则DatePicker会正确显示。但是,如果我将DatePicker添加到UIView,则日期选择器根本不会显示。

- (IBAction)setTimeButtonPressed:(UIButton *)sender
{
    // Creates Frame Rects for views and controls
    CGRect datePickerViewOutFrame = CGRectMake(0, 336, self.view.frame.size.width, 228);
    CGRect datePickerOutFrame = CGRectMake(0, 336, self.view.frame.size.width, 162);

    // Create View that will slide out
    UIView *datePickerView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 0)];
    datePickerView.backgroundColor = [UIColor flatCloudsColor];

    // Setup DatePicker
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 0)];
    datePicker.datePickerMode = UIDatePickerModeTime;
    datePicker.date = [NSDate date];
    datePicker.hidden = NO;

    [self.view addSubview:datePickerView]; 
    [datePickerView addSubview:datePicker]; /* DOES NOT WORK*/

    self.datePickerView.clipsToBounds = YES;

    // Animate the views sliding out from the bottom
    [UIView animateWithDuration:0.5
                          delay:0
                        options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         datePicker.frame = datePickerOutFrame;
                         datePickerView.frame = datePickerViewOutFrame;

                     }
                     completion:^(BOOL finished){
                         // Might need later
                     }];
}

但是,如果我更改添加datePicker的行,它可以工作,但我无法将其剪辑到datePickerView的边界。

[self.view addSubview:datePickerView];
[self.view addSubview:datePicker];  /* Works but can't clip DatePicker */

我做错了什么?

1 个答案:

答案 0 :(得分:1)

UIDatePickerView框架需要相对于其父视图。因此,如果您要将其添加到datePickerView,则UIDatePicker的框架应具有0,0的原点,而不是基于视图控制器视图的高度

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 0)];