我有一个允许用户下载文件的PopoverController视图。按下按钮时,popOver视图将扩大大小,显示下载状态,并且主视图控制器将被未加隐藏的“封面”视图遮挡,该视图已添加到PopoverController的“passThroughViews”属性中,以便用户不会意外关闭文件下载时弹出。
我的问题是,在故事板中,我的主viewController嵌入在导航控制器中。我似乎无法用故事板中的视图覆盖导航控制器的栏,如果用户按下导航栏上的任何位置,则弹出窗口将消失,用户将丢失下载的进度条。
如何用我的“封面”视图掩盖导航栏,或者如何将导航栏的视图添加到我的popOverController的passThroughViews?
从主viewController打开Popover:
- (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];
}
在PopoverViewController中设置passThroughViews属性:
//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。我在这里错过了什么?谢谢你的阅读。
编辑: 正如Aglaia指出的那样,实现以下内容并避免使用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 :(得分:0)
也许有一些我缺少的东西,但为什么不只是实现一个新的视图控制器,其导航栏设置为无,并按下按钮按模式显示?然后,当下载完成时,您只需关闭视图控制器。
如果您希望用户查看基础视图,您可以使用UIAlertView。
或者将视图控制器设置为弹出控制器的委托,并禁止用户通过外部触摸来解除弹出窗口
- (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
return NO;
}
然后当你要解雇它时,请调用dismissPopoverAnimated:
答案 1 :(得分:0)
覆盖整个屏幕,包括导航栏:
[myView setFrame:[[UIScreen mainScreen] bounds];
[self.navigationController.view addSubview:myView];