【问题标题】:Don't Dismiss UIPopoverController when tap off点击关闭时不要关闭 UIPopoverController
【发布时间】:2011-09-14 00:37:07
【问题描述】:

经过一番搜索,我找不到对许多人来说似乎有用的问题的答案。

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

感谢您的帮助。

【问题讨论】:

  • “我意识到这可能违反了Apple的HIG……”你读了吗?
  • 我已经阅读了很多次,但它对设计也很有意义(从另一个应用程序打开文件进行保存),并且也看到不少应用程序这样做。 ://

标签: objective-c ios uipopovercontroller


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • +1:这,这太完美了。必须在文档中略过它。谢谢。当你调用dismissPopoverAnimated时它也不会被调用:所以甚至不必真正点击测试。谢谢
    • 注意:此委托方法(实际上是 UIPopoverControllerDelegate 的所有方法)已被弃用:developer.apple.com/documentation/uikit/…
    【解决方案3】:

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

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

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

    以下是 Apple 文档的摘录:

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

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多