         }
 
         public var body: some View {
-            PagingController(items: items,
-                             options: options,
-                             content: content,
-                             scrollToPosition: $scrollToPosition,
-                             willScrollCallback: willScrollCallback,
-                             didScrollCallback: didScrollCallback,
-                             didSelectCallback: didSelectCallback)
+            PagingController(
+                items: items,
+                options: options,
+                content: content,
+                onWillScroll: onWillScroll,
+                onDidScroll: onDidScroll,
+                onDidSelect: onDidSelect,
+                scrollToPosition: $scrollToPosition)
+        }
+
+        /// Called when the user finished scrolling to a new view.
+        ///
+        /// - Parameter action: A closure that is called with the
+        /// paging item that was scrolled to.
+        /// - Returns: An instance of self
+        public func didScroll(_ action: @escaping (PagingItem) -> Void) -> Self {
+            var view = self
+            view.onDidScroll = action
+            return view
+        }
+
+        /// Called when the user is about to start scrolling to a new view.
+        ///
+        /// - Parameter action: A closure that is called with the
+        /// paging item that is being scrolled to.
+        /// - Returns: An instance of self
+        public func willScroll(_ action: @escaping (PagingItem) -> Void) -> Self {
+            var view = self
+            view.onWillScroll = action
+            return view
+        }
+
+        /// Called when an item was selected in the menu.
+        ///
+        /// - Parameter action: A closure that is called with the
+        /// selected paging item.
+        /// - Returns: An instance of self
+        public func didSelect(_ action: @escaping (PagingItem) -> Void) -> Self {
+            var view = self
+            view.onDidSelect = action
+            return view
         }
 
         struct PagingController: UIViewControllerRepresentable {

                                      willScrollToItem pagingItem: PagingItem,
                                      startingViewController _: UIViewController,
                                      destinationViewController _: UIViewController) {
                parent.willScrollCallback?(pagingItem)
            }

            func pagingViewController(_: PagingViewController, didSelectItem pagingItem: PagingItem) {
                parent.didSelectCallback?(pagingItem)
            }
        }
    }

            let options: PagingOptions
            let content: (Item) -> Page
            var viewControllers = [Item: UIHostingController<Page>]()
            var onWillScroll: ((PagingItem) -> Void)?
            var onDidScroll: ((PagingItem) -> Void)?
            var onDidSelect: ((PagingItem) -> Void)?

            @Binding var scrollToPosition: PageViewScrollPosition?

            func makeCoordinator() -> Coordinator {
                Coordinator(self)
