3

클릭하면 UIDopicker에 UIDatePicker가 표시되는 UIButton이 있습니다.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

코드가 올바르게 표시됩니다. 'presentPopoverFromRect'를 호출하기 전에 DOB 버튼의 프레임 위치/크기와 성 필드를 'NSLog'할 수 있습니까? – dasblinkenlight

+0

감사합니다. 질문에 NSLog 출력을 추가했습니다. – Jon

+0

기록 된 숫자는 의심스러워 보입니다. 그들은 DOB 버튼과 성 라벨이 수직으로 정렬되어 있지만 버튼 (그림에서 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 permittedArrowDirections : UIPopoverArrowDirectionAny animated : YES];

또는

[self.datePopoverController presentPopoverFromRect : self.dateOfBirthButton.frame를 원한다면 InView : self.dateOfBirthButton.superview의 permittedArrowDirections : UIPopoverArrowDirectionAny 애니메이션 : YES];

관련 문제