UIPopover не отображается правильно из UIButton - PullRequest
3 голосов
/ 18 декабря 2011

У меня есть UIButton, который при нажатии отображает UIPopover с UIDatePicker в нем.

Предполагается, что он отображается под кнопкой для даты рождения, но вместо этого он покрывает ее.

Это код, который у меня есть:

- (IBAction)dateOfBirthButtonPressed:(id)sender{
    UIViewController* popoverContent = [[UIViewController alloc] init];
    UIView *popoverView = [[UIView alloc] init];
    popoverView.backgroundColor = [UIColor blackColor];

    UIDatePicker *datePickerTemp = [[UIDatePicker alloc]init];
    datePickerTemp.frame=CGRectMake(0,44,320, 216);
    datePickerTemp.datePickerMode = UIDatePickerModeDate;
    datePickerTemp.maximumDate = [NSDate date];
    self.datePicker = datePickerTemp;
    [popoverView addSubview:self.datePicker];

    UIToolbar *toolbar = [[UIToolbar alloc] init];
    toolbar.frame=CGRectMake(0,0 ,320, 40);
    toolbar.barStyle = UIBarStyleBlackOpaque;
    NSMutableArray *toolbarItems = [NSMutableArray array];
    UIBarButtonItem *cancelButton1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(datePickerCancelButtonClicked)];
    UIBarButtonItem *doneButton1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(datePickerSaveButtonClicked)];
    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [toolbarItems addObject:cancelButton1];
    [toolbarItems addObject:space];
    [toolbarItems addObject:doneButton1];
    toolbar.items = toolbarItems;
    [popoverView addSubview:toolbar];
    [cancelButton1 release];
    [space release];
    [toolbar release];

    popoverContent.view = popoverView;
    UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    popoverController.delegate=self;
    self.datePopoverController = popoverController;
    [popoverContent release];
    [popoverView release];

    [self.datePopoverController setPopoverContentSize:CGSizeMake(320, 264) animated:NO];
    [self.datePopoverController presentPopoverFromRect:self.dateOfBirthButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

NSLog для кадра:

DOB button: {{160, 129}, {329, 37}}
Last name label: {{160, 77}, {329, 31}}

enter image description here

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Является ли ваша кнопка подпредставлением вашего представления или скрыта в другом подпредставлении?Если это не прямое представление вашего вида, значит ваше координатное пространство отключено.Попробуйте изменить код на:

CGRect buttonRect = [self.dateOfBirthButton convertRect:self.dateOfBirthButton.frame toView:self.view];
[self.datePopoverController presentPopoverFromRect:buttonRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
0 голосов
/ 18 декабря 2011

Вы можете попробовать любой из них, чтобы решить проблему.Второй исправляет мою проблему, которая похожа на вашу.

[self.datePopoverController presentPopoverFromRect: self.dateOfBirthButton.frame inView: self.dateOfBirthButton selectedArrowDirections: UIPopoverArrowDirectionAny animated: 1005 *

1004 *; 5]* или

[self.datePopoverController presentPopoverFromRect: self.dateOfBirthButton.frame inView: self.dateOfBirthButton.superview разрешеноArrowDirections: UIPopoverArrowDirectionAny animated: YES]; * 1009

...