如何在 iOS 9 中检测弹出框何时消失
How to detect when a popover is dismissed in iOS 9
我正在更新应用以使用通用故事板。我通过从一个按钮拖动到我的新 viewcontroller 并选择 'Present As Popover' 作为一种 segue,使用界面生成器创建了一个到新 viewcontroller 的弹出窗口 segue。
当用户在弹出窗口外按下(关闭它)时,我需要在呈现视图控制器中得到通知,以便我可以撤消他们的操作。我该怎么做?
通常我会手动创建弹出窗口并将我的 viewcontroller 作为弹出窗口的委托;允许我使用 popoverControllerDidDismissPopover 委托回调。但是,这在 iOS9 中已被弃用,即使不是,我也不知道在哪里可以找到弹出窗口,因此我可以将其委托设置为我的视图控制器。
不确定您指的是哪种方法已弃用,但您仍然可以使用 UIPopoverPresentationControllerDelegate
来实现此目的。类似于:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let vc = segue.destinationViewController
sortVC.modalPresentationStyle = .Popover
sortVC.popoverPresentationController?.sourceRect = filterButton.bounds
sortVC.preferredContentSize = CGSizeMake(216, 150)
sortVC.popoverPresentationController!.delegate = self
}
}
然后使用
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController)
处理其解雇的方法。
popoverControllerDidDismissPopover:
方法已被 popoverPresentationControllerShouldDismissPopover:
取代,因为 UIPopoverControllerDelegate
已被 UIPopoverPresentationControllerDelegate
取代。
在您的呈现视图控制器中,遵循新协议并在 prepareForSegue:
中为弹出框呈现控制器设置委托:
class MyPresentingViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let popoverPresentationController = segue.destinationViewController.popoverPresentationController {
popoverPresentationController.delegate = self
}
}
func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool {
return true
}
}
然后您可以使用委托方法以您之前预期的方式处理解雇检测。
此问题的更新答案。
全部归功于此:
你必须在 iOS 13 上使用的方法:
- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
UIPopoverPresentationControllerDelegate
继承自 UIAdaptivePresentationControllerDelegate
,正如 Beto 指出的那样,它包含 presentationControllerShouldDismiss
和 presentationControllerDidDismiss
。
我只是将这些函数的弹出版本中的代码移到了 UIAdaptivePresentationControllerDelegate
版本中,它们的工作方式与以前完全相同。
不必更改视图控制器上的委托声明或设置 isModalInPresentation
。
原始代码在 13.2.3 下仍然有效,但这些功能已被贬值,总有一天它们会停止工作......还是不行?
我的应用程序是一个 iPad 应用程序,使用弹出窗口而不是演示文稿或卡片样式。
我正在更新应用以使用通用故事板。我通过从一个按钮拖动到我的新 viewcontroller 并选择 'Present As Popover' 作为一种 segue,使用界面生成器创建了一个到新 viewcontroller 的弹出窗口 segue。
当用户在弹出窗口外按下(关闭它)时,我需要在呈现视图控制器中得到通知,以便我可以撤消他们的操作。我该怎么做?
通常我会手动创建弹出窗口并将我的 viewcontroller 作为弹出窗口的委托;允许我使用 popoverControllerDidDismissPopover 委托回调。但是,这在 iOS9 中已被弃用,即使不是,我也不知道在哪里可以找到弹出窗口,因此我可以将其委托设置为我的视图控制器。
不确定您指的是哪种方法已弃用,但您仍然可以使用 UIPopoverPresentationControllerDelegate
来实现此目的。类似于:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let vc = segue.destinationViewController
sortVC.modalPresentationStyle = .Popover
sortVC.popoverPresentationController?.sourceRect = filterButton.bounds
sortVC.preferredContentSize = CGSizeMake(216, 150)
sortVC.popoverPresentationController!.delegate = self
}
}
然后使用
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController)
处理其解雇的方法。
popoverControllerDidDismissPopover:
方法已被 popoverPresentationControllerShouldDismissPopover:
取代,因为 UIPopoverControllerDelegate
已被 UIPopoverPresentationControllerDelegate
取代。
在您的呈现视图控制器中,遵循新协议并在 prepareForSegue:
中为弹出框呈现控制器设置委托:
class MyPresentingViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let popoverPresentationController = segue.destinationViewController.popoverPresentationController {
popoverPresentationController.delegate = self
}
}
func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool {
return true
}
}
然后您可以使用委托方法以您之前预期的方式处理解雇检测。
此问题的更新答案。
全部归功于此
你必须在 iOS 13 上使用的方法: - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
UIPopoverPresentationControllerDelegate
继承自 UIAdaptivePresentationControllerDelegate
,正如 Beto 指出的那样,它包含 presentationControllerShouldDismiss
和 presentationControllerDidDismiss
。
我只是将这些函数的弹出版本中的代码移到了 UIAdaptivePresentationControllerDelegate
版本中,它们的工作方式与以前完全相同。
不必更改视图控制器上的委托声明或设置 isModalInPresentation
。
原始代码在 13.2.3 下仍然有效,但这些功能已被贬值,总有一天它们会停止工作......还是不行?
我的应用程序是一个 iPad 应用程序,使用弹出窗口而不是演示文稿或卡片样式。