从popover呈现视图

时间:2014-09-29 09:56:15

标签: objective-c xcode uiviewcontroller uipopovercontroller

在我的应用程序中,用户可以按一个tableviewcell,其中显示一个带有按钮的popover。按此按钮将显示导航视图控制器。

DNWInfoViewController *infoViewController = [[DNWInfoViewController alloc] initWithInfoText:infoText];
    UINavigationController *navController    = [[UINavigationController alloc] initWithRootViewController:infoViewController];
    navController.modalPresentationStyle     = UIModalPresentationFormSheet;
    [self presentViewController:navController animated:YES completion:nil];

但是从iOS 8开始,我收到此警告并且视图未显示:

Warning: Attempt to present <UINavigationController: 0x180e1dc0>  on <ANProjectFilterViewController: 0x16ec5cf0> which is already presenting (null)

这一定是因为popovercontroller仍然显示所以我在呈现视图之前尝试了这个

[_ppvrController dismissPopoverAnimated:YES]; // This will not call the delegate

这个'修复'有效。但大多数时候它仍然显示警告,而不是我的观点。我尝试手动调用委托,但结果相同。

这曾经在iOS 7及更低版本中运行良好。如何在iOS 8中使用popover显示新视图?

编辑1

显示我找到了

dismissPopoverAnimated
由于某些原因,

在iOS 8中不起作用。通常,当用户从弹出窗口中选择一个项目时,会调用一个方法,该方法首先解除弹出窗口,然后执行一些自定义操作。在iOS 7中,弹出窗口在选择时消失,但在iOS 8中不会消失。

编辑2

所以实际触发警告的是这段代码:

[_ppvrController dismissPopoverAnimated:YES];

这段代码在方法中。从存在于弹出窗口内的按钮调用该方法。有一半时间弹出窗口被成功解散,但有时它会打印出警告,并且弹出窗口仍然可见。

注意:此方法中没有其他代码。只有一行就可以解雇popover。

2 个答案:

答案 0 :(得分:6)

这似乎是iOS 8上的一个错误。我建议你{+ 3}}给Apple。与此同时,我读到其他人正在使用此解决方法:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self presentViewController:yourNewNavigationController animated:YES completion:nil];
}];

答案 1 :(得分:1)

只需在自己的方法中移动presentViewController并使用performSelectorOnMainthread

调用它

那应该有用