3

私はUIButtonを持っています。これをクリックするとUIDopickerに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

コードが正しいように見えます。 'presentPopoverFromRect'を呼び出す前に、おそらくDOBボタンのフレーム位置/サイズと最後の名前フィールドを' NSLog'できますか? – dasblinkenlight

+0

よろしくお願いいたします。質問に「NSLog」の出力を追加しました。 – Jon

+0

ログに記録された数字は、DOBボタンとラストネームラベルが160で垂直方向に整列していると言われていますが、ボタン(画像のポップオーバーで覆われています)はラストネームラベルの右側にあります。 – 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

あなたはそれが問題を解決見るためにこれらのいずれかを試すことができ

これは私が持っているコードです。 2番目の問題は、私の問題をあなたのものと似ています。

[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]。

関連する問題