ios - 如何从 UIViewController 的扩展中为两个不同的 Controller 返回两个不同的呈现 Controller ?

标签 ios swift

这是我的分机:

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来区分它们(你可以简单地使用storyboard来设置):

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

相关文章:

ios - 提交 iOS 应用程序,xcode 3.2 与 4.2

ios - UIView.addSubview() 意外发现nil

ios - 模拟屏幕左下角的触摸 - Swift

ios - 从 PubNub 消息中检索内容

ios - 从 NSURL 获取一个参数

ios - 如何正确地将子类传递给 Swift 'inout' 方法进行更新?

ios - 将电话提供商与 Firebase 中的电子邮件提供商关联起来 (Swift)

ios - xcode 中性能测试的单独方案

ios - 滑动页面 View Controller 时,段 Controller 的选定段应该更改

android - 导出数据以预加载到移动应用中的 Firebase 实例中