PopoverPresentationController делегат методы не вызываются

У меня есть класс для создания UIPopoverPresentationController в пустом файле swift:

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()


    }


}

Но всякий раз, когда я увольняю PopoverPresentationController, метод делегата popoverPresentationControllerDidDismissPopoverникогда не запускается.

Я задал делегату loginScreenPopover значение self и позволил классу Popovers наследовать от UIPopoverPresentationControllerDelegate, но ни один из них не работает.

Это на iPhone, если это имеет отношение к вопросу.

1 ответ

  1. Я нашел ответ. В ViewDidLoad() на экране LogInScreen я задаю делегату значение:

    self.popoverPresentationController.delegate = getPopovers()
    

    Где getPopovers()функция является функцией для извлечения объекта Popover, созданного где-то еще в коде. Теперь в моем классе Popovers я могу соответствовать UIPopoverPresentationControllerDelegate и использовать эти методы.