Das ist mein Erweiterung:Wie können zwei verschiedene Präsentations-Controller für zwei verschiedene Controller von der Erweiterung von UIViewController zurückgegeben werden?
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)
}
}
Innerhalb presentationControllerForPresentedViewController:
Ich muss zurückkehren entweder BWOverlayPresentationController
oder BWSettingsPresentationController
je nachdem, welche Methode aufgerufen wurde. Wie erreiche ich das?
Aber kann ich dies tun irgendwie global? weil meine Methoden innerhalb der Erweiterung sind, nicht direkt in UIViewController. –
Ich würde vorschlagen, dass Sie einen BaseViewContoller mit zwei viewController-Objekten erstellen können, zB: BWOverlayPresentationController, BWSettingsPresentationController und je nach Bedingung können Sie den spezifischen View-Controller zurückgeben. – Krishna