从弹出窗口呈现视图
Posted
技术标签:
【中文标题】从弹出窗口呈现视图【英文标题】:presenting view from popover 【发布时间】:2014-09-29 09:56:15 【问题描述】:在我的应用程序中,用户可以按下一个 tableviewcell,它会在其标题中显示一个带有按钮的弹出框。按下此按钮将显示一个导航视图控制器。
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 中从弹出框呈现新视图?
编辑 1
显示我已经找到了
dismissPopoverAnimated
由于某种原因在 iOS 8 中不起作用。通常,当用户从弹出框中选择一个项目时,会调用一个方法,该方法首先关闭弹出框,然后执行一些自定义操作。在 iOS 7 中,弹出框会在选择时消失,但在 iOS 8 中不会。
编辑 2
所以真正触发警告的是这段代码:
[_ppvrController dismissPopoverAnimated:YES];
这段代码在一个方法中。该方法是从显示的弹出框内的按钮调用的。一半的时间弹出窗口被成功关闭,但有时它只是打印警告,弹出窗口保持可见。
注意:此方法中没有其他代码。只需一行即可关闭弹出框。
【问题讨论】:
【参考方案1】:这似乎是 iOS 8 上的一个错误。我建议您向 Apple 发送 report it。与此同时,我读到其他人正在使用这种解决方法:
[[NSOperationQueue mainQueue] addOperationWithBlock:^
[self presentViewController:yourNewNavigationController animated:YES completion:nil];
];
【讨论】:
不幸的是,这给了我同样的警告。 Apple 在发行说明中是否对此有所说明?我不明白为什么这在旧 iOS 版本中运行良好。 我发现dismissPopoverAnimated 在iOS 8 中不能正常工作 似乎是相同的行为。有时它有效,有时它显示警告。生病报告错误并接受答案,因为没有解决这个问题。 如果你尝试在任意延迟后调用它怎么样?double delayInSeconds = 0.01; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void) [self presentViewController:yourNewNavigationController animated:YES completion:nil]; );
不,抱歉仍然无法正常工作。延迟之后,警告就会弹出。请检查我在问题中的编辑,我在其中添加了我发现的另一件事。【参考方案2】:
只需在自己的方法中移动 presentViewController 并使用 performSelectorOnMainthread 调用它
应该可以的
【讨论】:
我尝试了 ricardo 的回答,它显示了相同的行为。这看起来像是 iOS 8 中的一个错误。以上是关于从弹出窗口呈现视图的主要内容,如果未能解决你的问题,请参考以下文章
从弹出窗口将 UIViewController 推送到 UINavigationController