From 0c7f01f2abcde02a246cb4655880b2bccebbb1f6 Mon Sep 17 00:00:00 2001 From: Mikhail Maslo Date: Sat, 6 Jan 2024 14:18:49 +0100 Subject: [PATCH 1/3] Invoke dismiss completion when BottomSheet was dismissed programmaticly --- .../Core/Extensions/UIViewController+Convenience.swift | 10 ++++++++++ .../BottomSheetModalDismissalHandler.swift | 2 ++ .../BottomSheetPresentationController.swift | 1 + 3 files changed, 13 insertions(+) diff --git a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift index 8ec73c6..5f59bfd 100644 --- a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift +++ b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift @@ -50,6 +50,8 @@ public final class DefaultBottomSheetModalDismissalHandler: BottomSheetModalDism private let _canBeDismissed: () -> Bool private let dismissCompletion: (() -> Void)? + private var didInvokeDismissal = false + // MARK: - Init init( @@ -75,6 +77,14 @@ public final class DefaultBottomSheetModalDismissalHandler: BottomSheetModalDism // User dismissed view controller by swipe-gesture, dismiss handler wasn't invoked dismissCompletion?() } + + didInvokeDismissal = true + } + + public func didDismiss() { + guard !didInvokeDismissal else { return } + + dismissCompletion?() } } diff --git a/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift b/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift index 18b9515..70fb1b2 100644 --- a/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift +++ b/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift @@ -10,4 +10,6 @@ public protocol BottomSheetModalDismissalHandler { var canBeDismissed: Bool { get } func performDismissal(animated: Bool) + + func didDismiss() } diff --git a/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift b/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift index c2a922f..ec59020 100644 --- a/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift +++ b/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift @@ -144,6 +144,7 @@ public final class BottomSheetPresentationController: UIPresentationController { removeScrollTrackingIfNeeded() state = .dismissed + dismissalHandler.didDismiss() } else { state = .presented } From 1b4348e3c11196d16120b3544ab18a1115d879ee Mon Sep 17 00:00:00 2001 From: Mikhail Maslo Date: Sat, 6 Jan 2024 14:23:22 +0100 Subject: [PATCH 2/3] Make naming more clear --- .../Core/Extensions/UIViewController+Convenience.swift | 2 +- .../Core/Presentation/BottomSheetModalDismissalHandler.swift | 2 +- .../Core/Presentation/BottomSheetPresentationController.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift index 5f59bfd..36a7840 100644 --- a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift +++ b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift @@ -81,7 +81,7 @@ public final class DefaultBottomSheetModalDismissalHandler: BottomSheetModalDism didInvokeDismissal = true } - public func didDismiss() { + public func didEndDismissal() { guard !didInvokeDismissal else { return } dismissCompletion?() diff --git a/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift b/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift index 70fb1b2..c17ab21 100644 --- a/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift +++ b/Sources/BottomSheet/Core/Presentation/BottomSheetModalDismissalHandler.swift @@ -11,5 +11,5 @@ public protocol BottomSheetModalDismissalHandler { func performDismissal(animated: Bool) - func didDismiss() + func didEndDismissal() } diff --git a/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift b/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift index ec59020..c1cd2c7 100644 --- a/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift +++ b/Sources/BottomSheet/Core/Presentation/BottomSheetPresentationController.swift @@ -144,7 +144,7 @@ public final class BottomSheetPresentationController: UIPresentationController { removeScrollTrackingIfNeeded() state = .dismissed - dismissalHandler.didDismiss() + dismissalHandler.didEndDismissal() } else { state = .presented } From fe672e5e2e8dd5821ace4872f50d154f7aa096d2 Mon Sep 17 00:00:00 2001 From: Mikhail Maslo Date: Sat, 6 Jan 2024 18:21:35 +0100 Subject: [PATCH 3/3] Adjust BottomSheet documentation --- .../User Interface/Screens/Root/RootViewController.swift | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift b/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift index 678daee..614c6c8 100644 --- a/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift +++ b/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift @@ -60,7 +60,7 @@ final class RootViewController: UIViewController { true }, dismissCompletion: { - // handle dismiss completion if user closed bottom sheet by a gesture + // handle bottom sheet dismissal completion } ) } diff --git a/README.md b/README.md index 86f4c95..229bde4 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ presentBottomSheet( true }, dismissCompletion: { - // handle dismiss completion if user closed bottom sheet by a gesture + // handle bottom sheet dismissal completion } ) ```