【问题标题】:How to dismiss popover View controller on iPad on tapping outside the view : IOS 9如何在 iPad 上关闭弹出视图控制器时在视图外点击:IOS 9
【发布时间】:2016-08-21 14:05:17
【问题描述】:

我正在尝试使用 .pagesheet 类型的模态样式将视图控制器呈现为 popoverviewcontroller。在这里,我尝试添加一个轻击手势识别器,以在单击其视图外时关闭此 popoverviewcontroller。但它没有在 iOS 9 中检测到点击。下面是手势识别器的代码

override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        let recog : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action:#selector(HandleTap))
        recog.numberOfTapsRequired = 1
        recog.numberOfTouchesRequired = 1
        recog.cancelsTouchesInView = false
        recog.delegate = self
        self.view.window?.addGestureRecognizer(recog)

    }


func HandleTap(sender:UITapGestureRecognizer) -> Void
{
    if(sender.state == UIGestureRecognizerState.Ended)
    {
        var location : CGPoint = sender.locationInView(self.presentingViewController?.view)
        //var location : CGPoint = sender.locationInView(self.view?.window)
        if(!(self.view.pointInside(self.view.convertPoint(location, toView: self.view?.window), withEvent: nil)))
        {
          self.view.window?.removeGestureRecognizer(sender)
          self.dismissViewControllerAnimated(true, completion: nil)
        }
    }
}

【问题讨论】:

    标签: ios swift ipad ios9 uigesturerecognizer


    【解决方案1】:

    在您处理水龙头的view 上将userinteractionenable 设置为true。第二件事为什么你在viewDidAppear做你的事情?您应该使用viewDidLoad 添加手势识别器。

    更新:

    self.view.window?.userInteractionEnabled = true
    

    如果你使用的是导航控制器,那么

    self.navigationController?.view.window?.userInteractionEnabled = true
    

    希望这会有所帮助:)

    【讨论】:

    • userInteraction 已通过 .xib 文件在视图上启用。
    • 如果您要向窗口添加手势识别器,那么您应该启用与窗口的用户交互。从 .xib 中,您只能启用查看
    • 并将打印语句放入handleTap,这样您就可以知道该方法是否被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多