UIPopOverController + UITableView – 当单元格被选中时隐藏popup窗口

在我的Popover控制器中,我有一个表格视图。 在select一个单元格时,我想隐藏popup窗口。 我怎样才能做到这一点。

在根视图控制器的头文件中:

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue; 

在执行文件中:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if( [[segue identifier] isEqualToString:@"popover"] ) { NSLog(@"%@",[segue destinationViewController]); self.popSegue = (UIStoryboardPopoverSegue*)segue; [[segue destinationViewController] setDelegate:self]; } } 

当你想隐藏popup窗口时:

  if ([self.popSegue.popoverController isPopoverVisible]) { [self.popSegue.popoverController dismissPopoverAnimated:YES]; } 

在表视图中,添加一个委托并在根视图控制器中实现该委托。 当委托方法被调用时,使用上面的代码来消除popup。

请允许我build议一个稍微不同的解决scheme,其中包括传递popover控制器引用而不是segue引用。

在源视图控制器的实现文件中:

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) { MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController]; UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue; [viewController setPopoverController:[popoverSegue popoverController]]; } } 

在目标视图控制器的头文件中:

 @property (weak, nonatomic) UIPopoverController* popoverController; 

在目标视图控制器的实现文件中:

 @synthesize popoverController; 

相同的文件,每当你想解散popover:

 [popoverController dismissPopoverAnimated:YES]; 

苹果文档build议如下:

以编程方式取消popover需要一个指向popover控制器的指针。 获得这样一个指针的唯一方法是自己存储它,通常在内容视图控制器中。 这确保内容视图控制器能够响应于适当的用户动作而closurespopup。

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/Popovers.html

在didSelectRowAtIndexPath中试试这个代码

 [viewController.popoverController dismissPopoverAnimated:YES];