Как добавить представление панели навигации в PassThroughViews PopOver? - PullRequest
1 голос
/ 07 марта 2012

У меня есть представление PopoverController, которое позволяет пользователю загрузить файл.При нажатии кнопки представление popOver будет увеличиваться в размере, отображать состояние загрузки, а контроллер основного представления будет скрыт скрытым представлением «Cover», которое было добавлено в свойство «PassThroughViews» PopoverController, так что пользователь не может случайно удалитьвсплывающее окно во время загрузки файла.

Моя проблема в том, что в раскадровках мой основной viewController встроен в контроллер навигации.Кажется, я не могу закрыть панель контроллера навигации видом в раскадровке, и если пользователь нажмет где-нибудь на панели навигации, всплывающее окно исчезнет, ​​и пользователь потеряет индикатор выполнения загрузки.

Какмне или скрыть панель навигации с моим видом "cover", или как добавить вид панели навигации в passThroughViews моего popOverController?

Открытие Popover из основного контроллера view:

- (IBAction)openDataOptionsPopOver:(id)sender  
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    PopOverViewController *optionsWindow = [storyboard instantiateViewControllerWithIdentifier:@"dataOptions"];
    self.popUp = [[UIPopoverController alloc] initWithContentViewController:optionsWindow];
    [self.popUp setDelegate:self];
    [nextNavButton setEnabled:NO];               //Disabling barButtonItem on the navigationController
    optionsWindow.containerPopOver = self.popUp; //Pointer to the popover, to resize it later.
    optionsWindow.coverView = self.coverView;    //Pointer to the coverView, to (un)hide later
    [popUp presentPopoverFromRect:[sender frame] inView:[sender superview]  permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
}

Установка свойства passThroughViews внутри PopoverViewController:

//Expands the popOver on press of "refreshFileButton" to display progressView
-(void) explodeWindow
{
    //setting self.navigationController.view and ...visibleViewController.view here didn't seem to work ...
    [containerPopOver setPassthroughViews:[NSArray arrayWithObjects:coverView, nil]];
    [containerPopOver setPopoverContentSize:CGSizeMake(600, 400) animated:YES];
    [titleBarItem setTitle:@"Downloading File.  Please Wait ..."];
    [refreshFileButton setHidden:YES];
    [progressView setHidden:NO];
    [downloadLabel setHidden:NO];
    [coverView setHidden:NO];
    [progressView setProgress:0.0 animated:NO];
}

Я попытался добавить self.navigationController.view к passThroughViews безуспешно - фактически это нулевой указатель.И я не могу разместить UIView на любом уровне в раскадровках, которые будут охватывать все мои элементы управления, не скрывая popOver.Что мне здесь не хватает?И спасибо за прочтение.

Редактировать: Как подчеркивает Аглая, реализация следующего, избегая passThroughViews, вероятно, лучший способ сделать это.

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    //Don't dismiss our popover when the view covering our controls is present
    if([coverView isHidden]){
        return YES;
    }else{
        return NO;
    }
}

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

, чтобы охватить весь экран, включая панель навигации:

[myView setFrame:[[UIScreen mainScreen] bounds];
[self.navigationController.view addSubview:myView];
0 голосов
/ 07 марта 2012

Может быть, есть кое-что, чего мне не хватает, но почему бы вам просто не внедрить новый контроллер вида с его панелью навигации, установленной на none, и представить его модально при нажатии кнопки?Затем, когда загрузка закончится, вы просто отклоните контроллер представления.

Если вы хотите, чтобы пользователь видел базовое представление, вы можете вместо этого использовать UIAlertView.

В качестве альтернативы установите контроллер представления в качестве делегата.контроллера поповера и запретить пользователю отклонять ваш поповер при прикосновении снаружи через

    - (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    return NO;
}

Затем, когда вы хотите отклонить его, вызовите dismissPopoverAnimated:

...