使用通用故事板时,dismissViewController不会关闭显示的视图控制器

时间:2014-10-09 20:04:17

标签: ios objective-c ipad uipopovercontroller

我发现了一种情况导致dismissViewController:animated:completion没有关闭已经呈现的视图控制器。虽然它在运行iOS 8的iPad上有所消失,但在运行iOS 7.1的iPad上并没有消失。我尝试过selfself.presentingViewControllerself.presentedViewController - 一切都没有。我已经尝试使用Xcode 6.0和6.1 beta。虽然我确实认为这是一个错误,但是可以做些什么来解决这个问题,并强制解雇该视图控制器,确保它适用于运行iOS 7和8的iPad(作为弹出框提供),以及运行iOS 7和8的iPhone(全屏显示)?

我创建了一个非常简单的项目,您可以尝试使用它:Xcode project zip

项目设置:

  • 针对iOS 7 +的通用故事板
  • 实施Popover Presentation segue
  • 实现解除popover中popover的能力

遇到意外行为:

  1. 打开提供的Xcode项目
  2. 在iPad iOS 7模拟器上运行应用程序
  3. 点击顶部单元格以显示弹出窗口
  4. 点击popover中的单元格以解除它

1 个答案:

答案 0 :(得分:0)

问题在于您尝试处理弹出窗口的方式。要关闭弹窗框,您应使用dismissPopoverAnimated方法而不是dismissViewControllerAnimated

我认为您必须完成更多工作才能完成定位两个iOS版本的任务。根视图控制器应具有一些属性来存储创建的popover,PoppedUpTVC作为弹出内容,PoppedUpTVC必须要求根视图控制器对存储的popover执行dismissPopoverAnimated方法以关闭它。

要获取对弹出窗口的引用,请在prepareForSegue

中尝试此操作
if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]]) {
    UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
    yourDestViewController.propertyToStorePopover = popoverSegue.popoverController;
}