【发布时间】:2020-03-21 12:36:44
【问题描述】:
我刚刚发现popoverPresentationControllerDidDismissPopover 方法已被弃用。
有什么替代方法?
【问题讨论】:
我刚刚发现popoverPresentationControllerDidDismissPopover 方法已被弃用。
有什么替代方法?
【问题讨论】:
看来UIPopoverPresentationControllerDelegate 协议包含UIAdaptivePresentationControllerDelegate 协议,它有
// Called on the delegate when the user has taken action to dismiss the presentation successfully, after all animations are finished.
// This is not called if the presentation is dismissed programatically.
@available(iOS 13.0, *)
optional func presentationControllerDidDismiss(_ presentationController: UIPresentationController)
并且presentationControllerDidDismiss() 似乎在弹出框被解除时被调用。
【讨论】:
UIPopoverPresentationControllerDelegate的定义一样。 ``` // 当用户采取行动关闭弹出框时在委托上调用。以编程方式关闭弹出框时不会调用此方法。 - (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController API_DEPRECATED_WITH_REPLACEMENT("presentationControllerDidDismiss:", ios(8.0, 13.0)); ```
遗憾的是,Apple 的文档没有留下任何提示。我会这样解决问题。
您设置弹出框并获取UIPopoverPresentationController,如下所示:
UIViewController* controller = [[MyCustomViewController alloc] init];
controller.modalPresentationStyle = UIModalPresentationPopover;
[self presentViewController:controller animated:YES completion:nil];
UIPopoverPresentationController* pc = [controller popoverPresentationController];
pc.sourceView = self.view;
pc.sourceRect = CGRectZero;
这里的controller 对象代表被弹出框包裹的主视图控制器——您的自定义视图控制器。我认为您最好的选择是覆盖自定义视图控制器的 -viewDidDisappear: 方法。当弹出框表示控制器关闭弹出框时,将调用该方法。
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"%@ - %@", NSStringFromSelector(_cmd), self);
// Do the needful.
}
我认为 Apple 很遗憾,他们没有提供弃用理由或关于如何处理它的建议。希望对您有所帮助!
【讨论】:
实现UIPopoverPresentationControllerDelegate并使用popoverPresentationControllerDidDismissPopover方法。
【讨论】: