我在这里有点腌菜。我有一个为ios7.1编写的应用程序,我们现在正在尝试使用相同的应用程序支持ios 8.1。
在这个应用程序中,我们有几个popovers。我已经完成了将它们作为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进行通信。这工作并使用UIPopoverController在ios7.1中执行,但在使用UIPopoverPresentationController的iOS8.1中,它不会触发。
我已经确认用户在rightNavController中单击了register,但协议/委托没有被执行。
有人可以帮忙吗?
答案 0 :(得分:0)
一个老问题,但希望这有助于其他人。
我今天遇到了同样的问题,解决方案是将popover控制器声明为实例变量而不是局部变量。作为局部变量,无论弹出视图是否仍在屏幕上,它都会在方法返回后随时收集垃圾。 (在iOS8中,垃圾收集似乎更具攻击性/效率,因此可能只暴露了您已经拥有的错误。)保持视图控制器的句柄,直到视图被解除,并且所有委托方法都可以正常工作。 / p>