Skip to content

[Question] DrawerPresentationControllerDelegate not working, applied to a UIViewController received as argument in a Pod class #3

@pckz

Description

@pckz

My I have to make a Pod who show a modal with custom height from bottomBar compatible with iOS12.

I trying to use a library called UIDrawer to show the bottomBar

I have a Pod that is initialized as following:

Example init ViewController:

let myPod = myPodController(controller: self, randomStr: "someRandomString")
myPod.run()

and myPodController has the following structure class

public class myPodController: UIViewController {
    let mainController: UIViewController // <- is the init ViewController passed as argument who will execute the .present() function later
    var bottomController: UINavigationController
    var someCustomController: SomeCustomControllerWithLogic

    public init(controller: UIViewController, randomStr: String) {
    
        self.mainController = controller
        self.randomStr = randomStr
        self.bottomController = UINavigationController(rootViewController: someCustomController)
    }
    
    public func run() {
        DispatchQueue.main.async {
             self.bottomController.modalPresentationStyle = .custom
             self.bottomController.transitioningDelegate = self
             self.mainController.present(self.bottomController, animated: true) // <-- here has to present, and transitionDelegate not work with the extension declared
        }
    }
}
extension myPodController: DrawerPresentationControllerDelegate {
    public func drawerMovedTo(position: DraweSnapPoint) {

    }
}
extension myPodController: UIViewControllerTransitioningDelegate {
    func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
        return DrawerPresentationController(presentedViewController: presented, presenting: presenting, blurEffectStyle: .dark)
    }
}

using UIDrawer files who make the render, theres no way that the delegate of extension UIViewControllerTransitioningDelegate works

In the original example of UIDrawer works, I think because they declare the extension for the class who has can render the modal directly with:

self.present(viewController, animated: true)
In my case, I have to present with self.mainController:

self.mainController.present(viewController, animated: true)
and I think that's why the extension of DrawerPresentationControllerDelegate not work with the custom lib UIDrawer

So, my question is: How can extends the DrawerPresentationControllerDelegate for a custom controller that is located as variable into a class, in this case, how to make the self.mainController accepts the delegate of DrawerPresentationControllerDelegate?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions