如何在UIPopoverPresentationController中使用passthroughView?

时间:2016-02-03 09:39:24

标签: ios

我使用UIPopoverPresentationController并且在多次显示弹出窗口后出现错误

UIPopoverPresentationController (<UIPopoverPresentationController: 0x7b259aa0>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.

有趣的是,这是我使用的另一个实例。我有一个sourceView并非零。我的实例是0x7b615680而不是0x7b259aa0。

现在问题是这个实例来自何处以及为什么使用它而不是我的?据我所知,iOS自行管理生命周期,因此不需要强引用(如iOS 7),并且不存在内存管理问题。

iOS是否每次都需要来自视图控制器的新popoverPresentationController属性,尽管它是相同的视图控制器但具有不同的数据?我试过了,但过了一段时间我也得到了错误。

修改

现在我发现,如果我没有设置passthroughViews,那么它可以正常运行而不会崩溃。那么passthroughViews有什么问题?哪个视图层次结构在passthroughViews中有一个视图?

它适用于nilnew UIView()new UICollectionViewCell(),但既不是UICollectionView的实例,也不是UICollectionViewCell的实例...... < / p>

同时在completion handler中设置passthroughViews也没有帮助。

此外,如果我使用相同的视图控制器和内容从相同的UIView启动弹出窗口,我可以每次都显示和关闭popover而不会崩溃。如果我直接选择其中一个直通视图,应用程序只会崩溃!是以错误的方式使用DismissViewController吗?

现在我尝试使用默认的UIViewController作为popover的内容,行为是相同的。所以它不是popover的内容。

编辑2:

可能会出现问题,因为UICollectionView中的视图无法用作passthroughViews。你有没有人试过吗?我没有找到任何解决方案,所以我唯一的解决方案就是不要在iOS 8及更高版本上使用passthroughViews。在iOS 7上它运行正常。

1 个答案:

答案 0 :(得分:0)

@property(非原子,强)UIPopoverPresentationController * popup;

我们必须在头文件中定义以防止此类警告和强引用错误。