Skip to content

Commit fcad2cf

Browse files
authored
Add convenience for presentation with navigation controller. Document new parameters (#24)
* Add convenience to navigation controller. Add new parameters to the demo * Add docs for new customizations * Invoke `dismissCompletion` when user dismissed bottom sheet by interactive gesture
1 parent c0fd663 commit fcad2cf

3 files changed

Lines changed: 34 additions & 5 deletions

File tree

BottomSheetDemo/Sources/User Interface/Screens/Root/RootViewController.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ final class RootViewController: UIViewController {
5454
let viewController = ResizeViewController(initialHeight: 300)
5555
presentBottomSheetInsideNavigationController(
5656
viewController: viewController,
57-
configuration: .default
57+
configuration: .default,
58+
canBeDismissed: {
59+
// return `true` or `false` based on your business logic
60+
true
61+
},
62+
dismissCompletion: {
63+
// handle dismiss completion if user closed bottom sheet by a gesture
64+
}
5865
)
5966
}
6067
}

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,14 @@ presentBottomSheet(
7878
cornerRadius: 10,
7979
pullBarConfiguration: .visible(.init(height: 20)),
8080
shadowConfiguration: .init(backgroundColor: UIColor.black.withAlphaComponent(0.6))
81-
)
81+
),
82+
canBeDismissed: {
83+
// return `true` or `false` based on your business logic
84+
true
85+
},
86+
dismissCompletion: {
87+
// handle dismiss completion if user closed bottom sheet by a gesture
88+
}
8289
)
8390
```
8491

Sources/BottomSheet/Core/Extensions/UIViewController+Convenience.swift

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ public final class DefaultBottomSheetModalDismissalHandler: BottomSheetModalDism
6969
}
7070

7171
public func performDismissal(animated: Bool) {
72-
presentingViewController?.presentedViewController?.dismiss(animated: animated, completion: dismissCompletion)
72+
if let presentedViewController = presentingViewController {
73+
presentedViewController.dismiss(animated: animated, completion: dismissCompletion)
74+
} else {
75+
// User dismissed view controller by swipe-gesture, dismiss handler wasn't invoked
76+
dismissCompletion?()
77+
}
7378
}
7479
}
7580

@@ -106,8 +111,18 @@ public extension UIViewController {
106111
present(viewController, animated: true, completion: nil)
107112
}
108113

109-
func presentBottomSheetInsideNavigationController(viewController: UIViewController, configuration: BottomSheetConfiguration) {
114+
func presentBottomSheetInsideNavigationController(
115+
viewController: UIViewController,
116+
configuration: BottomSheetConfiguration,
117+
canBeDismissed: @escaping (() -> Bool) = { true },
118+
dismissCompletion: (() -> Void)? = nil
119+
) {
110120
let navigationController = BottomSheetNavigationController(rootViewController: viewController, configuration: configuration)
111-
presentBottomSheet(viewController: navigationController, configuration: configuration)
121+
presentBottomSheet(
122+
viewController: navigationController,
123+
configuration: configuration,
124+
canBeDismissed: canBeDismissed,
125+
dismissCompletion: dismissCompletion
126+
)
112127
}
113128
}

0 commit comments

Comments
 (0)