点按时不要关闭UIPopoverController

时间:2011-06-13 15:33:09

标签: objective-c ios uipopovercontroller

经过一番搜索后,我无法找到对许多人来说似乎有用的东西的答案。

当用户点击外面某处时,有没有办法让UIPopoverController 解雇?我希望用户必须使用取消按钮(是的,我意识到这可能会以某种方式违反Apple的HIG,但这是一种罕见的情况,从用户体验的角度来看是有意义的)。

感谢您的帮助。

3 个答案:

答案 0 :(得分:26)

只需在modalInPopover中显示的UIViewController上设置UIPopoverController属性即可。

popover = [[UIPopoverController alloc] initWithContentViewController:content];
content.modalInPopover = YES;
[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

请注意,as of iOS5,您必须在modalInPopover内设置-viewDidAppear

答案 1 :(得分:20)

您可以对点击发生的位置进行点击测试,并在弹出窗口的委托中返回NO。 - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

答案 2 :(得分:1)

所以,我意识到这是一个老问题。但是,对于今天寻求解决方案的人来说,这是一个更简单的答案。

如果您使用Storyboard Segue,则可以在segue上设置passthrough属性,以允许与视图中的其他对象进行交互。如果这样做,单击弹出窗口边界外不会关闭弹出窗口。

这里有更多信息: What are Anchor and Passthrough used for in popover segues?

以下是Apple文档的摘录:

  

允许用户与指定的视图进行交互而不是关闭   弹出窗口,您可以将一个或多个视图分配给passthroughViews   属性。