Reputation: 221
When voiceOver is on, how can I dismiss UIPresentViewController?
Upvotes: 0
Views: 347
Reputation: 5123
You will need to add custom view to presenting view and add tap gesture recogniser to it.
Look into Adding Custom Views to a Presentation at Apple Doc
Also, added snippet of some of the functionality.
private lazy var backgroundView: UIView = UIView(frame: CGRect.zero)
private lazy var tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer()
override init(presentedViewController: UIViewController,
presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismiss))
self.backgroundView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.backgroundView.isUserInteractionEnabled = true
self.backgroundView.addGestureRecognizer(tapGestureRecognizer)
}
override func containerViewDidLayoutSubviews() {
super.containerViewDidLayoutSubviews()
self.presentedView?.frame = self.frameOfPresentedViewInContainerView
if let container = self.containerView {
// Set frame for background view
self.backgroundView.frame = container.bounds
}
}
override func presentationTransitionDidEnd(_ completed: Bool) {
if !completed {
self.backgroundView.removeFromSuperview()
}
// Additional TearDown
}
override func presentationTransitionWillBegin() {
self.containerView?.addSubview(self.backgroundView)
// Additional SetUp
}
// Tap gesture handler
@objc
func dismiss() {
self.presentedViewController.dismiss(animated: true, completion: nil)
}
Upvotes: 1