Search code examples
iosxcodeswiftxibuipopovercontroller

UIPopoverController popoverControllerDidDismissPopover not working


I am presenting a popover controller on an iPad from a uibutton. I set the UIPopoverController's delegate to the main view controller. The "popoverControllerShouldDismissPopover" and the "popoverControllerDidDismissPopover" are both not being called. Am I missing something?

class MainVC: UIViewController,UIPopoverControllerDelegate

@IBAction func btnTPD(sender: UIButton) {

    var vc = MyXIB(nibName: "MyXIB",bundle: nil)

    var nav = UINavigationController(rootViewController: vc)

    var popover = UIPopoverController(contentViewController: nav)
    popover.delegate = self
    popover.popoverContentSize = CGSize(width: 283, height: view.bounds.height * 0.6)
    popover.presentPopoverFromRect(sender.frame, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: false)

}

func popoverControllerShouldDismissPopover(popoverController: UIPopoverController) -> Bool {

    println("SHOULD DISMISS")

    return true

}

func popoverControllerDidDismissPopover(popoverController: UIPopoverController) {

    println("DID DISMISS")

}

Solution

  • It seems my UIPopoverController instance (var popover) needs to be declared outside the "btnTPD" function for the delegate functions to work.

    class MainVC: UIViewController,UIPopoverControllerDelegate {
    
    var popover: UIPopoverController!
    
    @IBAction func tapped(sender: UIButton) {
    
        var vc = MyXIB(nibName: "MyXIB",bundle: nil)
    
        var nav = UINavigationController(rootViewController: vc)
    
        popover = UIPopoverController(contentViewController: nav)
        popover.delegate = self
        popover.popoverContentSize = CGSize(width: 283, height: view.bounds.height * 0.6)
        popover.presentPopoverFromRect(sender.frame, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: false)
    
    }
    
    func popoverControllerShouldDismissPopover(popoverController: UIPopoverController) -> Bool {
    
        println("SHOULD DISMISS")
    
        return true
    
    }
    
    func popoverControllerDidDismissPopover(popoverController: UIPopoverController) {
    
        println("DID DISMISS")
    
    }
    

    }