2012-03-06 62 views
1

我有一个PopoverController视图,允许用户下载文件。在按钮按下时,popOver视图的大小将扩大,显示下载状态,并且主视图控制器将被添加到PopoverController的“passThroughViews”属性的未隐藏的“封面”视图遮挡,以便用户不会意外地关闭在文件下载时弹出。如何将导航栏的视图添加到PopOver的PassThroughViews?

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

我该如何用我的“封面”视图掩盖导航栏,或者如何将导航栏的视图添加到我的popOverController的passThroughViews中?

从主的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]; 
} 

设置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

也许有我丢失的东西,但你为什么不只是实现其导航栏新的视图控制器设置为none和模态目前它在按下按钮?然后,当下载完成后,您只需关闭视图控制器。

如果您希望用户看到底层视图,您可以改为使用UIAlertView。

或者设置你浏览器作为酥料饼的控制器的委托,并禁止用户之外通过

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

要关闭触摸酥料饼然后,当你想关闭它调用dismissPopoverAnimated:

+0

使用'popoverControllerShouldDismissPopover'可能是最好的方法来完成什么我正在努力。虽然,我仍然想知道是否有方法将导航栏视图添加到“passThroughViews”。 – Erracity 2012-03-07 12:41:25

0

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

[myView setFrame:[[UIScreen mainScreen] bounds]; 
[self.navigationController.view addSubview:myView]; 
相关问题