2012-03-06 6 views
1

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

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

Как сокрыть панель навигации с помощью «обложки», или как добавить вид навигационной панели в свой passThroughViews popOverController?

Открытие поповер от главного ViewController:

- (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; 
    } 
} 

ответ

0

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

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

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

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

Затем, когда вы хотите, чтобы закрыть его называют dismissPopoverAnimated:

+0

Использование 'popoverControllerShouldDismissPopover', вероятно, является лучшим методом для достижения того, что Я пытаюсь это сделать. Хотя, я все еще задаюсь вопросом, есть ли способ добавить отображение навигационной панели в «passThroughViews». – Erracity

0

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

[myView setFrame:[[UIScreen mainScreen] bounds]; 
[self.navigationController.view addSubview:myView];