防止UIPopover上的动画被外部点击解雇?

时间:2013-06-19 23:16:38

标签: ios ipad uipopovercontroller

当用户点击弹出窗口外,解雇是动画的。有没有办法将解雇动画设置为NO?我在谷歌上广泛搜索和搜索。

UIPopover状态的文档:

  

显示时,弹出窗口外的水龙头会导致弹出窗口   被自动解雇。允许用户与之交互   指定视图而不是解除弹出窗口,可以指定一个或   有关passthroughViews属性的更多视图。在弹出窗口内轻敲   窗口不会自动导致弹出窗口被解除。您的   查看和查看控制器代码必须处理内部的操作和事件   明确地使用popover并将dismissPopoverAnimated:方法调用为   需要的。

我已使用dismissPopoverAnimated:实施了NO方法,并且在我调用该方法时适用于所有情况。

问题是当用户点击popover外部以解雇时,dismissPopoverAnimated:未被调用。

  弹出窗口外的

点击导致弹出窗口   被自动解雇。

这种解雇是动画的。似乎没有办法控制解雇。我正在使用popover为绘图应用程序呈现颜色选择器。在弹出窗口完成动画制作之前,不会注册要绘制的点击。这会产生明显的延迟,因为您无法立即绘制但必须等待动画完成。

我认为- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController可以正常工作,但AFAIK无法在此方法中设置动画属性。只需返回是或否。

我可以实现一种不同的方法来将动画设置为NO吗?

3 个答案:

答案 0 :(得分:8)

在呈现UIPopoverController的视图控制器中,符合UIPopoverControllerDelegate协议并实现以下委托方法。我刚测试了这个,它确实没有动画就解雇了弹出窗口。

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    [self.myPopoverController dismissPopoverAnimated:NO];
    return YES;
}

只需确保已将弹出控制器的委托设置为实现此目的的视图控制器。

答案 1 :(得分:0)

默认情况下,在iOS 9+上modalPresentationStyle = .Popover,您可以实现此方法以防止取消点击

public func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return false
    }

答案 2 :(得分:0)

快捷键5

当我们通过点击外部关闭popOver时,这将禁用动画。

extension YourViewController: UIPopoverPresentationControllerDelegate {

  func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
        // to prevent animation, we need to dismiss it manuallly with animated: false
        presentationController.presentingViewController.dismiss(animated: false, completion: nil)
        return true
    }
 }