1

私はここに状況があります、これで私を助けてください、

1) カスタム セルを含むテーブルがあります。2) 各セルには 2 つの検索バーと 2 つのラベルがあります。

私が試みていたのは、ユーザーが searchBar の編集を開始すると、その検索バーを指すポップオーバーが表示されるはずです。

これを実装しましたが、目的の検索バーの上にポップオーバーが表示されず、ポップオーバーの高さも長すぎる場合があります

if (searchBar.tag==10) {
    NSLog(@"Display date popover");
    CGRect pickerFrame = CGRectMake(0,0,300,200);

    UIViewController *tempDateViewController=[[UIViewController alloc] init];

    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];

    [datePicker addTarget:self action:@selector(pickerChanged:) forControlEvents:UIControlEventValueChanged];

    [tempDateViewController.view addSubview:datePicker];

    if(!currentPopover)
    {

        currentPopover=[[UIPopoverController alloc] initWithContentViewController:tempDateViewController];
    }
    else {

        [currentPopover setContentViewController:tempDateViewController animated:YES];

    }

    tempDateViewController.contentSizeForViewInPopover=CGSizeMake(320, 300);
    [datePicker release];
    [tempDateViewController release];
    [currentPopover presentPopoverFromRect:searchBar.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];



}   

これを解決するのを手伝ってください。事前にサンクス。

4

1 に答える 1

3

searchBar は、テーブル ビューにあるセル内にあります (レイアウトによっては他のビューにある場合があります)。最も可能性の高い問題は、self.view が、これを呼び出している searchBar の直接の親ではないことです。そのため、self.view で searchBar のフレームを使用すると、予期しない結果が生じます。

self.view を使用して searchBar がそれに対して相対的な場所を把握しようとする代わりに、「inView」と「rect」に searchBar 自体を使用して、searchBar の境界を使用できます。

[currentPopover presentPopoverFromRect:searchBar.bounds inView:searchBar 
    permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


次に、ポップオーバーの高さを修正するには、View Controller の contentSizeForViewInPopover の代わりに 、ポップオーバーの popoverContentSize を設定してみてください。

//tempDateViewController.contentSizeForViewInPopover=CGSizeMake(320, 300);
currentPopover.popoverContentSize = CGSizeMake(320, 300);


最後に、別の問題ですが、日付ピッカーの最小の高さは 200 ではなく 216 にする必要があります。

CGRect pickerFrame = CGRectMake(0,0,300,216);
于 2011-03-10T13:37:06.213 に答える