Xcode 如何添加导航栏';s查看PopOver';什么是路过视图?

Xcode 如何添加导航栏';s查看PopOver';什么是路过视图?,xcode,ipad,ios5,uipopovercontroller,uistoryboard,Xcode,Ipad,Ios5,Uipopovercontroller,Uistoryboard,我有一个PopoverController视图,允许用户下载文件。按下按钮时,popOver视图将扩展大小,显示下载状态,主视图控制器将被添加到PopoOverController的“passThroughViews”属性中的未隐藏的“cover”视图遮挡,这样用户就不会在下载文件时意外关闭popOver 我的问题是,在故事板中,我的主viewController嵌入在导航控制器中。我似乎无法用情节提要中的视图覆盖导航控制器的栏,如果用户按下导航栏上的任何位置,则弹出窗口将消失,用户将丢失下载进

我有一个PopoverController视图,允许用户下载文件。按下按钮时,popOver视图将扩展大小,显示下载状态,主视图控制器将被添加到PopoOverController的“passThroughViews”属性中的未隐藏的“cover”视图遮挡,这样用户就不会在下载文件时意外关闭popOver

我的问题是,在故事板中,我的主viewController嵌入在导航控制器中。我似乎无法用情节提要中的视图覆盖导航控制器的栏,如果用户按下导航栏上的任何位置,则弹出窗口将消失,用户将丢失下载进度栏

如何用我的“cover”视图覆盖导航栏,或者如何将导航栏的视图添加到popOverController的passthroughView

从主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]; 
}
//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];
}
在PopOverview控制器内设置PassThroughView属性:

- (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]; 
}
//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添加到passthroughview中,但没有成功——它实际上是一个空指针。而且,我似乎无法在故事板中的任何级别放置UIView,以覆盖我的所有控件,而不遮挡popOver。我错过了什么?谢谢你的阅读

编辑: 正如Aglaia在下面指出的,实现以下内容并避免传递视图可能是实现这一点的最佳方法

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

也许我遗漏了一些东西,但为什么不实现一个新的视图控制器,将其导航栏设置为“无”,然后按按钮以模式显示它呢?下载完成后,您只需关闭视图控制器

如果希望用户查看基础视图,可以改用UIAlertView

或者,将您的view controller设置为popover controller的代理,并禁止用户通过外部触摸关闭您的popover

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

然后,当您要取消该功能时,请调用dismissPopoverAnimated:

覆盖整个屏幕,包括导航栏:

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

使用
PopOvercontrollersouldDismissPopOver
可能是完成我尝试的任务的最佳方法。不过,我仍然想知道是否有办法将导航栏视图添加到“passthroughview”中。