1

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

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

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

在仪表板视图控制器中:

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 中的注册,但协议/委托没有被执行。

有人可以帮忙吗?

4

1 回答 1

0

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

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

于 2015-06-30T15:26:33.530 回答