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,并根据条件返回特定视图控制器的值。