这是我的扩展:

extension UIViewController: UIViewControllerTransitioningDelegate {

    func presentAssignBookToClassesViewController(controller: BWAssignBookToClassesViewController) {

        controller.modalPresentationStyle = .Custom
        controller.transitioningDelegate = self
        controller.preferredContentSize = CGSizeMake(500, 575)

        presentViewController(controller, animated: true, completion: nil)
    }

    func presentSettingsStoryboard() {

        if let settingsController = UIStoryboard(name: "TeacherSettingsStoryboard", bundle: nil).instantiateInitialViewController() {

            settingsController.modalPresentationStyle = .Custom
            settingsController.transitioningDelegate = self
            settingsController.preferredContentSize = CGSizeMake(500, 575)

            presentViewController(settingsController, animated: true, completion: nil)
        }
    }

    //MARK: - UIViewControllerTransitioningDelegate

    public func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {

        return BWOverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }
}

presentationControllerForPresentedViewController:中,我需要根据调用的方法返回BWOverlayPresentationControllerBWSettingsPresentationController。如何实现呢?

最佳答案

您可以通过restorationIdentifier来区分它们(您可以使用故事板来简单地进行设置):

//MARK: - UIViewControllerTransitioningDelegate

public func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {

    if presented.restorationIdentifier == BWSettingsRestorationIdentifier {
        return BWSettingsPresentationController(presentedViewController: presented, presentingViewController: presenting)
    } else {
        return BWOverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }
}

关于ios - 如何从UIViewController的扩展中为两个不同的 Controller 返回两个不同的呈现 Controller ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36640240/

10-11 19:49