ipad: поповер не появляется в соответствующем месте - PullRequest
1 голос
/ 09 марта 2011

У меня есть ситуация, пожалуйста, помогите мне в этом,

1) У меня есть таблица с пользовательскими ячейками 2) Каждая ячейка имеет 2 строки поиска и 2 метки.

Я пытался предположить, что пользователь начинает. При редактировании панели поиска должно появиться всплывающее окно, указывающее на эту строку поиска.

Я реализовал это, но всплывающее окно не отображается над желаемой строкой поиска, более того, высота всплывающего окна также иногда слишком велика

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];



}   

Пожалуйста, помогите мне решить эту проблему. Спасибо заранее.

1 Ответ

3 голосов
/ 10 марта 2011

Панель поиска находится внутри ячейки, которая находится в табличном представлении (которое может быть в каком-либо другом представлении в зависимости от вашего макета). Скорее всего, проблема в том, что self.view не является прямым родителем searchBar, где вы вызываете это. Поэтому использование фрейма searchBar в self.view даст неожиданные результаты.

Вместо того, чтобы использовать self.view и пытаться выяснить, где searchBar относительно этого, вы можете использовать сам searchBar для «inView» и для «rect», использовать границы searchBar:

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


Затем, чтобы зафиксировать высоту всплывающего окна, попробуйте установить popoverContentSize вместо 10000 * элемента управления представления viewSizeForViewInPopover контроллера:

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


Наконец, отдельная проблема, но минимальная высота для средства выбора даты должна быть 216, а не 200:

CGRect pickerFrame = CGRectMake(0,0,300,216);
...