5

当用户在弹出框外点击时,解除动画。有没有办法将解雇动画设置为 NO?我在 Stack 上进行了广泛的搜索和搜索。

UIPopover 状态的文档:

显示时,在弹出窗口外点击会导致弹出窗口自动消失。要允许用户与指定的视图交互而不关闭弹出框,您可以将一个或多个视图分配给 passthroughViews 属性。弹出窗口内的点击不会自动导致弹出窗口被关闭。您的视图和视图控制器代码必须显式处理弹出框内的操作和事件,并根据需要调用 dismissPopoverAnimated: 方法。

我已经实现了该dismissPopoverAnimated:方法,NO并且当我调用该方法时它适用于所有情况。

问题是当用户在弹出框之外点击以关闭时,dismissPopoverAnimated:不会被调用。

在弹出窗口外点击会导致弹出窗口自动消失。

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

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

我可以实施其他方法来将动画设置为 NO 吗?

4

3 回答 3

10

在呈现 UIPopoverController 的视图控制器中,遵守 UIPopoverControllerDelegate 协议并实现以下委托方法。我刚刚对此进行了测试,它确实在没有动画的情况下关闭了弹出框。

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

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

于 2013-06-19T23:45:48.443 回答
1

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

public func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return false
    }
于 2020-01-23T14:19:45.030 回答
1

斯威夫特 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
    }
 }
于 2020-02-11T05:36:14.967 回答