【问题标题】:ipad, How to manage Popover presented from barbuttonitem?ipad,如何管理从 barbuttonitem 呈现的 Popover?
【发布时间】:2012-03-31 07:06:11
【问题描述】:
我知道 UIPopovercontroller 在呈现时不会保留自己。所以我们必须保留对它的引用以使其保持活力
并且当按下显示弹出框的 barbuttonitem 时,它不会自动关闭弹出框,它实际上会在您按下按钮时一次又一次地在其上显示另一个弹出框,并且没有做任何特别的检查来检查是否已经有一些弹出框.
我知道我们可以有很多属性来维护每个 barbuttonitem 的弹出框,但我认为这很难看...
有没有更好的做法?
【问题讨论】:
标签:
ipad
uipopovercontroller
uibarbuttonitem
【解决方案1】:
我正在使用带有 ARC 的弹出框,并且不需要做任何特别的事情来维持引用计数。只要弹出框在屏幕上,就会有强烈的引用来保持它的活力。您有可以发布的失败案例吗?
我认为您提到的第二个问题更有趣:反复按下 barButtonItem 会创建弹出框的多个实例。很难看到它们,因为它们堆叠在一起。但是随着每个添加的实例,弹出窗口周围的阴影会变得更暗。这个问题的真正提示是每个实例都必须单独关闭。
一种解决方案是在进出弹出窗口时禁用/启用 UIBarButtonItem。这对我来说效果很好,但有点乏味。 (我必须将代码放在两个地方 - 一个在我自己的解除程序中,另一个在 popoverController 的委托 - popoverControllerDidDismissPopover: 方法中,用于用户在弹出框外部单击以解除它的情况。)
我认为(优秀的)斯坦福 CS193P 课程通过在弹出窗口显示时隐藏按钮来解决这个问题。
iOS 的行为实际上看起来像是一个错误。 barButtonItem 中的单击在弹出框之外,除非 barButtonItem 的视图包含在弹出框的传递数组中,否则它应该(根据文档)关闭弹出框。但事实并非如此,Apple 也没有问我。
我刚刚检查并发现 passthrough 数组最初是 nil,因此从该数组中删除 barButtonItem 的视图不是一个选项。德拉特。