Ios 如何从UIViewController的扩展中为两个不同的控制器返回两个不同的表示控制器?

Ios 如何从UIViewController的扩展中为两个不同的控制器返回两个不同的表示控制器?,ios,swift,Ios,Swift,这是我的分机: extension UIViewController: UIViewControllerTransitioningDelegate { func presentAssignBookToClassesViewController(controller: BWAssignBookToClassesViewController) { controller.modalPresentationStyle = .Custom controller.

这是我的分机

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)
    }
}
//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)
    }
}

在演示文稿控制器的演示文稿控制器中:根据调用的方法,我需要返回
bOverlyPresentationController
bSettingsPresentationController
。如何实现这一点?

我建议您可以创建一个带有两个viewController对象的BaseViewController,例如:BWOverlyPresentationController、BWSettingsPresentationController,并根据条件返回特定的视图控制器

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

    // You can create some property in presented/presenting viewController.
    // and check here to return specific viewContoller.

    if (presented.(somePropertyInViewController)) {
        return BWOverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }
    else {
        return BWSettingsPresentationController(presentedViewController: presented, presentingViewController: presenting)
    }
}
public func presentationControllerForPresentedViewController(presented: UIViewController?, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
let viewController = BaseViewController()
if (viewController.(somePropertyInViewController)) {
    return BWOverlayPresentationController(presentedViewController: presented, presentingViewController: presenting)
}
else {
    return BWSettingsPresentationController(presentedViewController: presented, presentingViewController: presenting)
}

您只需通过
restorationIdentifier
(您只需使用情节提要)即可将其区分开来:


但我能在全球范围内做到这一点吗?因为我的方法在扩展中,而不是直接在UIViewController中。我建议您可以创建一个带有两个viewController对象的BaseViewController,例如:BWOverlyPresentationController、BWSettingsPresentationController,并根据条件返回特定视图控制器的值。