将工具栏和选择器作为UIPopoverController的子视图放置的问题

时间:2013-08-06 06:22:47

标签: iphone ios uipopovercontroller

我想把工具栏和选择器视图作为popovercontroller的子视图,为此我做了以下操作,到目前为止,我的选择器视图显示完美但在上面我还想显示我的工具栏,其中有一个按钮命名如果您发现我正在做的事情

,请为我做以下事情请指导我
- (IBAction)setAlarm:(id)sender {

    UIViewController* popoverContent = [[UIViewController alloc] init];
    UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 344)];
    popoverView.backgroundColor = [UIColor whiteColor];


    [popoverView addSubview:toolbar];
    [popoverView addSubview:timePicker];

    timePicker.hidden = NO;
    toolbar.hidden = NO;

    popoverContent.view = popoverView;

    //resize the popover view shown
    //in the current view to the view's size
    popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 216);

    //create a popover controller
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    timePicker.frame = popoverView.bounds;
    toolbar.frame    = popoverView.bounds;

    CGRect popoverRect ;
    popoverRect.origin.x =591;
    popoverRect.origin.y = 139;
    popoverRect.size.height = 95;
    popoverRect.size.width = 44;

    [popoverController presentPopoverFromRect:popoverRect
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionUp
                                     animated:YES];

    //release the popover content
    [popoverView release];
    [popoverContent release];

    timePicker.hidden = NO;
    toolbar.hidden = NO;


}

1 个答案:

答案 0 :(得分:1)

问题是您将booth子视图的框架设置为相同的值:

timePicker.frame = popoverView.bounds;
toolbar.frame    = popoverView.bounds;

所以,首先添加的一个将隐藏在另一个之后。您需要设置框架,以便工具栏正确定位在拾取器上方(并调整弹出框的大小以允许两者都有空间)。


类似的东西:

CGRect toolbarFrame = toolbar.frame;
toolbarFrame.size.width = 320;
toolbar.frame = toolbarFrame;

CGRect pickerFrame = timePicker.frame;
pickerFrame.origin.y = toolbarFrame.size.height;
pickerFrame.size.width = 320;
timePicker.frame = pickerFrame;

popoverView.frame = CGRectMake(0, 0, 320, pickerFrame.origin.y + pickerFrame.size.height);

popoverContent.contentSizeForViewInPopover = popoverView.frame.size;