ipad,如何管理barbuttonitem提供的Popover?

时间:2012-03-31 07:06:11

标签: ipad uipopovercontroller uibarbuttonitem

我知道UIPopovercontroller在呈现时不会保留自己。所以我们必须保留它的引用才能保持活着

当按下呈现弹出窗口的barbuttonitem时,它不会自动关闭弹出窗口,当你按下按钮并且没有做任何特别的检查是否已经有一些弹出窗口时,它实际上会一次又一次地呈现另一个弹出窗口

我知道我们可以拥有许多属性来维护每个barbuttonitem的popover,但我认为这很难看......

有没有更好的做法?

1 个答案:

答案 0 :(得分:0)

我正在使用带有ARC的弹出窗口,并且不需要做任何特殊的事情来维护引用计数。只要弹出窗口在屏幕上,就会有强烈的引用来保持它的活力。你有可以发布的失败案例吗?

我认为你提到的第二个问题更有趣:按barButtonItem重复创建弹出窗口的多个实例。很难看到它们,因为它们彼此叠加在一起。但是每个添加的实例弹出窗口周围的阴影会变暗。问题的真正原因是每个实例都必须单独解雇。

一种解决方案是在进出弹出窗口的过程中禁用/启用UIBarButtonItem。这对我很有用,但有点单调乏味。 (我必须将代码放在两个地方 - 一个在我自己的dismisser中,另一个在popoverController的委托中 - popoverControllerDidDismissPopover:方法,对于用户在popover外部点击以解除它的情况。)

我认为(优秀的)斯坦福CS193P课程通过在弹出窗口显示时隐藏按钮来解决这个问题。

iOS行为实际上看起来像个bug。 barButtonItem中的一个单击是在popover 之外,除非barButtonItem的视图包含在popover的passthrough数组中,否则它应该(根据文档)忽略popover。但它没有,Apple没有问我。

我刚检查过并发现passthrough数组最初是nil,因此从该数组中删除barButtonItem的视图不是一个选项。 DRAT。