diff --git a/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift b/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift index 67317f2..10d68e2 100644 --- a/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift +++ b/BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift @@ -54,7 +54,10 @@ final class RootViewController: UIViewController { let viewController = ResizeViewController(initialHeight: 300) presentBottomSheetInsideNavigationController( viewController: viewController, - configuration: .default + configuration: .default, + dismissCompletion: { + print("TWA: dismissCompletion") + } ) } } diff --git a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift index 990a51f..fc5b472 100644 --- a/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift +++ b/Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift @@ -95,8 +95,33 @@ public extension UIViewController { present(viewController, animated: true, completion: nil) } + func presentBottomSheet(viewController: UIViewController, configuration: BottomSheetConfiguration, dissmisCompletion: @escaping (() -> Void)) { + weak var presentingViewController = self + weak var currentBottomSheetTransitionDelegate: UIViewControllerTransitioningDelegate? + let presentationControllerFactory = DefaultBottomSheetPresentationControllerFactory(configuration: configuration) { + DefaultBottomSheetModalDismissalHandler(presentingViewController: presentingViewController) { + if currentBottomSheetTransitionDelegate === presentingViewController?.bottomSheetTransitionDelegate { + presentingViewController?.bottomSheetTransitionDelegate = nil + } + dissmisCompletion() + } + } + bottomSheetTransitionDelegate = BottomSheetTransitioningDelegate( + presentationControllerFactory: presentationControllerFactory + ) + currentBottomSheetTransitionDelegate = bottomSheetTransitionDelegate + viewController.transitioningDelegate = bottomSheetTransitionDelegate + viewController.modalPresentationStyle = .custom + present(viewController, animated: true, completion: nil) + } + func presentBottomSheetInsideNavigationController(viewController: UIViewController, configuration: BottomSheetConfiguration) { let navigationController = BottomSheetNavigationController(rootViewController: viewController, configuration: configuration) presentBottomSheet(viewController: navigationController, configuration: configuration) } + + func presentBottomSheetInsideNavigationController(viewController: UIViewController, configuration: BottomSheetConfiguration, dismissCompletion: @escaping (() -> Void)) { + let navigationController = BottomSheetNavigationController(rootViewController: viewController, configuration: configuration) + presentBottomSheet(viewController: navigationController, configuration: configuration, dissmisCompletion: dismissCompletion) + } } diff --git a/Sources/BottomSheet/Core/NavigationController/BottomSheetNavigationController.swift b/Sources/BottomSheet/Core/NavigationController/BottomSheetNavigationController.swift index bb7d297..9675f64 100644 --- a/Sources/BottomSheet/Core/NavigationController/BottomSheetNavigationController.swift +++ b/Sources/BottomSheet/Core/NavigationController/BottomSheetNavigationController.swift @@ -26,6 +26,11 @@ public final class BottomSheetNavigationController: UINavigationController { super.init(rootViewController: rootViewController) } + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + self.configuration = .default + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + } + @available(*, unavailable) required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented")