UIPopoverPresentationController 中的视图委托没有响应

Posted

技术标签:

【中文标题】UIPopoverPresentationController 中的视图委托没有响应【英文标题】:delegate of view in UIPopoverPresentationController not reponding 【发布时间】:2014-10-24 08:20:17 【问题描述】:

我在这里有点麻烦。我有一个为 ios7.1 编写的应用程序,我们现在正在尝试使相同的应用程序支持 ios 8.1。

在这个应用程序中,我们有几个弹出框。我已经完成了让它们在 iOS8 中正确显示为弹出框的修复,但是当我单击弹出框时,它没有按预期响应。

这是它的呈现方式(全部连接在故事板中):

在 DashboardViewController 中:

if ([segue.identifier isEqualToString:@"showRHSMenu"]) 
_rightNavController =  segue.destinationViewController;
_rightNavController.preferredContentSize = CGSizeMake(220, (_rightNavController.tableView.rowHeight * _rightNavController.dataArray.count));
_rightNavController.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popoverPresentationController = _rightNavController.popoverPresentationController;
popoverPresentationController.delegate = self;


在 _rightNavController 中,声明了一个与 DashboardViewController 通信的协议。这工作并在 ios7.1 中使用 UIPopoverController 执行,但在 iOS8.1 中使用 UIPopoverPresentationController,它不会触发。

我已经确认用户点击了 rightNavController 中的注册,但是协议/委托没有被执行。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

一个老问题,但希望这对其他人有帮助。

我今天遇到了同样的问题,解决方案是将弹出控制器声明为实例变量而不是局部变量。作为一个局部变量,它在方法返回后的任何时候都会被垃圾回收,无论弹出视图是否仍在屏幕上。 (垃圾收集在 iOS8 中似乎更加激进/高效,因此很可能只是暴露了您已经拥有的错误。)保持视图控制器的句柄直到视图被关闭,并且所有委托方法都应该可以正常工作。

【讨论】:

以上是关于UIPopoverPresentationController 中的视图委托没有响应的主要内容,如果未能解决你的问题,请参考以下文章