3

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

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

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

- (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

+0

Ваш код выглядит правильно. Могли бы вы, возможно, «NSLog» указать расположение/размеры фрейма кнопки DOB и полей имени перед вызовом 'presentPopoverFromRect'? – dasblinkenlight

+0

Хорошо, спасибо. Я добавил вывод 'NSLog' в вопрос. – Jon

+0

Зарегистрированные номера выглядят подозрительными: они говорят, что кнопка DOB и метка имени по вертикали выровнены по вертикали на 160, но кнопка (покрытая popover на картинке) находится справа от метки имени. – dasblinkenlight

ответ

1

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

CGRect buttonRect = [self.dateOfBirthButton convertRect:self.dateOfBirthButton.frame toView:self.view]; 
[self.datePopoverController presentPopoverFromRect:buttonRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
0

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

[self.datePopoverController presentPopoverFromRect: self.dateOfBirthButton.frame inView: self.dateOfBirthButton allowedArrowDirections: UIPopoverArrowDirectionAny animated: YES];

или

[self.datePopoverController presentPopoverFromRect: self.dateOfBirthButton.frame INview: self.dateOfBirthButton.superview permittedArrowDirections: UIPopoverArrowDirectionAny анимированные: ДА];

Смежные вопросы