ich eine Klasse habe einen UIPopoverPresentationController in einer leeren swift-Datei zu erstellen:PopoverPresentationController Delegatmethoden genannt nicht
import Foundation
import UIKit
class Popovers : NSObject, UIPopoverPresentationControllerDelegate {
func presentLoginScreen() {
// Presenting login Popover
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginScreen = storyboard.instantiateViewControllerWithIdentifier("LogInScreen")
let window = UIApplication.sharedApplication().windows.last!
let height = window.screen.bounds.size.height
let width = window.screen.bounds.size.width
loginScreen.modalPresentationStyle = UIModalPresentationStyle.Popover
loginScreen.preferredContentSize = CGSizeMake(width * 0.85 , height * 0.35)
let loginScreenPopover = loginScreen.popoverPresentationController
loginScreenPopover?.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0)
loginScreenPopover?.delegate = self
loginScreenPopover?.sourceView = window.rootViewController?.view
loginScreenPopover?.sourceRect = CGRectMake(CGRectGetMidX(window.screen.bounds), CGRectGetMidY(window.screen.bounds), 0, 0)
window.rootViewController?.presentViewController(loginScreen, animated: true, completion: nil)
let blur = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
let bounds = window.screen.bounds
blur.frame = bounds
blur.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
window.rootViewController!.view.addSubview(blur)
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
// Remove blur layer
print("method called")
let window = UIApplication.sharedApplication().windows.last
window?.subviews.last?.removeFromSuperview()
}
}
Aber immer, wenn ich den PopoverPresentationController die Methode delegiert entlassen popoverPresentationControllerDidDismissPopover
wird nie ausgelöst.
Ich habe den Delegaten von LoginScreenPopover auf self gesetzt und die Popovers-Klasse von UIPopoverPresentationControllerDelegate erben lassen, aber keiner scheint zu funktionieren.
Es ist auf einem iPhone, wenn das für die Frage relevant ist.
Wie haben Sie den 'popOverController' abgeschaltet? Wenn Sie es programmgesteuert ablehnen, wird 'func popoverPresentationControllerDidDismissPopover' nicht ausgelöst – luiyezheng
Ich habe es nicht programmatisch abgewiesen, ich klopfte außerhalb der Popover-Ansicht – Emptyless
Für mich war das Problem, dass das Aufrufen des PopoverViewController durch ein" PerformSegue "immer ignorierte die Delegierten. Das Löschen des Storyboard-Segments und das manuelle Zusammenstellen und Anzeigen durch den presentViewController löste es. – Alexandre