【问题标题】:UIPopOverController for iPhone (currently only available for iPad)适用于 iPhone 的 UIPopOverController(目前仅适用于 iPad)
【发布时间】:2011-04-22 03:45:01
【问题描述】:

在我为 iPhone 实现类似的东西之前,我想知道是否有人为 iPhone 实现了类似的 UIPopOverController。到目前为止,这仅适用于 iPad。

【问题讨论】:

    标签: iphone ios4 uipopovercontroller


    【解决方案1】:

    在这里查看我的实现:https://github.com/werner77/WEPopover

    它具有与 UIPopoverController 相同的界面,但适用于 iPhone 并支持自定义背景视图。

    【讨论】:

    • 非常有用。大功告成!
    • 有错误。 1. 如果委托没有实现 shouldDismissPopover 则崩溃(很容易修复)。由于您已将该方法声明为可选,因此不实现该方法是正确的行为。 2. 当popoverContentSize 改变而popover 可见时不调整自身大小。这个不容易修复(至少在我试图修复的 10 分钟内没有,但我还是会这样做,因为 UIKit 版本中存在致命的设计缺陷)。附言我很乐意分享我的修复,我需要你的电子邮件地址 - 不知道如何使用我正在使用的 GitX 客户端提交拉取请求。
    • 苹果会批准 iPhone 中的弹出式控制器吗?
    • 在应用商店提交应用会被拒绝吗?
    • @Jasmine:Facebook 应用有一个弹出框控制器,它在应用商店中,所以苹果可能会批准。
    【解决方案2】:

    我在http://github.com/KJoyner/SeaGlass 提供了另一个替代的 SGPopoverController。与 WEPopover 一样,它具有与 UIPovoerController 类似的界面,但适用于 iPhone。此版本处理更多极端情况,模态和非模态都可以工作,支持直通视图等等。

    【讨论】:

    • 太棒了,我马上去看看。
    • 我没有发现 SGPopoverController 这么好。例如,当箭头靠近拐角时,它会出现渲染问题。其次,它缺少 presentPopoverFromBarButtonItem 方法。如果你需要一个替代 UIPopoverController 的替代品,这个还不是。
    • 您遇到了什么样的渲染问题?能不能在github上输入issue,我看一下。
    • 另外,Apple 没有提供文档化的 API 来使 presentPopoverFromBarButtinItem 100% 的工作(尤其是在设备旋转期间)。这记录在 docx 文件中,但这里是我用来将其锚定在栏按钮操作中的代码: if ([event respondsToSelector:@selector(allTouches)]) { UIView* itemView = [[event.allTouches anyObject] view ]; anchor = [itemView convertRect:itemView.bounds toView:primaryView]; } else { // 我们忽略该事件,如果我们无法确定锚点返回,则返回; }
    • @KenJoyner 能否请您帮我获取“SeaGlass 库”,因为它在您提供的示例项目中不存在。
    【解决方案3】:

    创建 UIPopover+iPhone.h

    #import <Foundation/Foundation.h>
    
    @interface UIPopoverController (overrides)
    + (BOOL)_popoversDisabled;
    @end
    

    【讨论】:

    • 请注意,由于它是私有变量,因此不会在 App Store 审核中获得批准。
    • 如果您不使用类别方法,但子类化 UIPopoverController 可能会起作用。
    【解决方案4】:

    UIPopoverController 不是 iPhone 上的标准 UI 元素是有原因的,因为屏幕空间相当有限。有一个易于阅读的弹出框意味着相当多的 iPhone 屏幕将被弹出框占据。也许你应该重新考虑你的 UI 决定。

    也许是一个coverVertical模式视图?

    【讨论】:

    • 这不是真的。 MapKit 中有一个未记录的 UICalloutView 用于类似目的。它不需要像 PopoverController 一样大,但足以显示我传递给它的一些定义明确的内容视图。
    • 我想我会在 MapKit 之外重新编写 UICalloutView。不过感谢您的建议。
    【解决方案5】:

    找到另一个 git。看起来更新和积极维护。它使用 QuantzCore 来绘制弹出框,看起来和 iOS 的 SDK 原生一样优雅。 仅供参考:https://github.com/50pixels/FPPopover

    【讨论】:

      【解决方案6】:

      基本上,最好的方法是实现自定义 UIAlertView 子类,这些子类通过自定义动画来实现您想要的外观/行为,并能够单击后面并消失(如果您想要该功能,因为 UIPopoverController 拥有它)

      编辑:您也可以尝试使用视图并以模态方式呈现它,尽管动画可能不是您想要的。

      【讨论】:

        猜你喜欢
        • 2012-06-18
        • 2012-05-18
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多