class MyView < UIVIewController ... # set gesture to close def viewDidAppear(animated) recognizer = UITapGestureRecognizer.alloc.initWithTarget(self, action: 'handleTapBehind:') recognizer.setNumberOfTapsRequired(1) recognizer.cancelsTouchesInView = false self.view.window.addGestureRecognizer(recognizer) end # handle tap def handleTapBehind(sender) if sender.state == UIGestureRecognizerStateEnded location = sender.locationInView(nil) unless self.view.pointInside(self.view.convertPoint(location, fromView: self.view.window), withEvent: nil) self.view.window.removeGestureRecognizer(sender) self.dismissViewControllerAnimated(true, completion: lambda{}) end end end end