我正在以编程方式关闭弹出视图控制器。如何在我的第一个视图控制器中检测到它?有没有一种方法可以将值从弹出窗口发送到第一个?
注意:以编程方式关闭popoverPresentationControllerDidDismissPopover无效。
有什么主张吗?

这是我在主视图控制器中的代码:

    let addFriendsPopoverViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeEmotionPopOver") as! EmotionPopOverViewController
    addFriendsPopoverViewController.modalInPopover = true
    addFriendsPopoverViewController.modalPresentationStyle =   UIModalPresentationStyle.Popover
    addFriendsPopoverViewController.preferredContentSize = CGSizeMake(100, 100)
    let popoverMenuViewController = addFriendsPopoverViewController.popoverPresentationController
    popoverMenuViewController!.permittedArrowDirections = .Any
    popoverMenuViewController!.delegate = self
    popoverMenuViewController!.sourceView = self.view
    let height = (self.tableView.rowHeight - HeartAttributes.heartSize / 2.0 - 10) + (self.tableView.rowHeight * CGFloat((sender.view?.tag)!)) - 50
    popoverMenuViewController!.sourceRect = CGRect(
        x: 30,
        y: height,
        width: 1,
        height: 1)
    presentViewController(
        addFriendsPopoverViewController,
        animated: true,
        completion: nil)

在弹出视图控制器中,我将其从按钮IBAction中取消:
     @IBAction func dismissPop(sender: AnyObject) {
    self.dismissViewControllerAnimated(true, completion: nil)

}

最佳答案

表达问题的方式是,您正在主视图控制器上寻找一个功能,该功能在关闭弹出窗口时会被调用。

从技术上讲,这是viewDidAppear(animated:)发生的。但是,它不是一个完整的解决方案。如果您的弹出窗口不能覆盖整个屏幕,则此功能将不会触发,因此这是不可靠的解决方案。

您真正想要的是从弹出窗口中调用一个函数,以提醒主视图控制器该函数已完成/已退出。使用委托协议可以轻松完成此操作

protocol PopoverDelegate {
    func popoverDismissed()
}

class PopoverViewController {
    weak var delegate: PopoverDelegate?

    //Your Popover View Controller Code
}

将协议一致性添加到您的主视图控制器
class MainViewController: UIViewController, PopoverDelegate {
     //Main View Controller code
}

然后,您需要将委托设置为,以使弹出窗口成为主视图控制器。
let addFriendsPopoverViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeEmotionPopOver") as! EmotionPopOverViewController
addFriendsPopoverViewController.delegate = self
//The rest of your code

最后,关闭时从弹出视图控制器中调用此委托函数。
@IBAction func dismissPop(sender: AnyObject) {
     dismissViewControllerAnimated(true, completion: nil)
     delegate?.popoverDismissed()
}

在您的主视图控制器中,实现委托方法
func popoverDismissed() {
    //Any code to run when popover is dismissed
}

关于ios - 无法以编程方式检测到“关闭弹出窗口”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39667488/

10-12 00:08
查看更多