如何检测iOS 9中弹出窗口被解除的时间

时间:2015-11-01 23:59:10

标签: ios ios9 uistoryboardsegue uipopover universal-storyboard

我正在更新应用以使用通用故事板。我已经使用界面构建器创建了一个popover segue到一个新的viewcontroller,方法是从一个按钮拖动到我的新viewcontroller并选择'Present As Popover'作为segue的类型。

当用户按下弹出窗口(解除它)时,我需要在演示视图控制器中得到通知,以便我可以撤消他们的操作。我怎么能这样做?

通常我会手动创建popover并使我的viewcontroller成为popover的委托;允许我使用popoverControllerDidDismissPopover委托回调。但是,这在iOS9中已被弃用,即使不是我也不知道在哪里可以找到popover,所以我可以将其委托设置为我的视图控制器。

4 个答案:

答案 0 :(得分:12)

不确定您所指的哪种方法已被弃用,但您仍然可以使用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)

处理解雇的方法。

答案 1 :(得分:6)

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
    }
}

然后,您可以使用委托方法以您之前想要的方式处理解雇的检测。

答案 2 :(得分:0)

此问题的更新答案。

对此answer的所有贡献:

您必须在iOS 13上使用的方法: -(void)presentationControllerDidDismiss:(UIPresentationController *)presentationController

答案 3 :(得分:0)

UIPopoverPresentationControllerDelegate继承自UIAdaptivePresentationControllerDelegate,其中包含{to所指出的presentationControllerShouldDismisspresentationControllerDidDismiss

我只是将这些函数的弹出版本中的代码移至UIAdaptivePresentationControllerDelegate版本,它们的工作原理与以前完全相同。

不必更改视图控制器上的委托声明,也不必设置isModalInPresentation

原始代码仍在13.2.3下工作,但这些功能已过时,有一天它们将停止工作...还是不能?

我的应用是一个iPad应用,使用的是弹出窗口,而不是演示文稿表格或卡片样式。