This repository was archived by the owner on Nov 3, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +60
-0
lines changed
Expand file tree Collapse file tree 2 files changed +60
-0
lines changed Original file line number Diff line number Diff line change @@ -15,17 +15,34 @@ import UIKit
1515 having to do those changes directly on the view
1616 */
1717class PanContainerView : UIView {
18+
19+ private weak var presentedViewController : UIViewController ?
1820
1921 init ( presentedView: UIView , frame: CGRect ) {
2022 super. init ( frame: frame)
2123 addSubview ( presentedView)
24+ presentedViewController = presentedView. parentViewController
2225 }
2326
2427 @available ( * , unavailable)
2528 required init ? ( coder aDecoder: NSCoder ) {
2629 fatalError ( " init(coder:) has not been implemented " )
2730 }
2831
32+ override func accessibilityPerformEscape( ) -> Bool {
33+ var shouldPerforEscape : Bool = true
34+ if let panModalPresentable = presentedViewController as? PanModalPresentable {
35+ shouldPerforEscape = panModalPresentable. allowsDragToDismiss || panModalPresentable. allowsTapToDismiss
36+ presentedViewController? . dismiss ( animated: true , completion: nil )
37+ }
38+ return shouldPerforEscape
39+ }
40+ }
41+
42+ private extension UIResponder {
43+ var parentViewController : UIViewController ? {
44+ return next as? UIViewController ?? next? . parentViewController
45+ }
2946}
3047
3148extension UIView {
Original file line number Diff line number Diff line change 1+ //
2+ // UIAccessiblityPerformEscapeTests.swift
3+ // PanModalTests
4+ //
5+ // Created by Sungdoo on 2022/03/17.
6+ // Copyright © 2022 Detail. All rights reserved.
7+ //
8+
9+ import XCTest
10+ import PanModal
11+
12+ class UIAccessiblityPerformEscapeTests : XCTestCase {
13+
14+ class MockViewController : UIViewController , PanModalPresentable {
15+ var panScrollable : UIScrollView ? { return nil }
16+ }
17+
18+ func testAccessibilityPerformEscape( ) throws {
19+
20+ let presenterViewController = UIApplication . shared. keyWindow? . rootViewController
21+ let panModal : UIViewController & PanModalPresentable = MockViewController ( )
22+
23+ presenterViewController? . presentPanModal ( panModal)
24+ XCTAssertNotNil ( presenterViewController? . presentedViewController, " panModal should have been presented " )
25+
26+ let presentDidFisnish = XCTestExpectation ( )
27+ let dismissDidFinish = XCTestExpectation ( )
28+
29+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
30+
31+ let panContainerView = panModal. view. superview
32+ presentDidFisnish. fulfill ( )
33+
34+ panContainerView? . accessibilityPerformEscape ( )
35+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 1 ) {
36+ XCTAssertNil ( presenterViewController? . presentedViewController, " panModal should have been dismissed " )
37+ dismissDidFinish. fulfill ( )
38+ }
39+ }
40+
41+ wait ( for: [ presentDidFisnish, dismissDidFinish] , timeout: 10 )
42+ }
43+ }
You can’t perform that action at this time.
0 commit comments