2

我有一个可以显示多个弹出框的视图控制器。不是同时。哪个是知道哪个弹出窗口被解雇的最佳方法popoverControllerDidDismissPopover

我必须对被解雇的弹出框采取不同的行动。

非常感谢

4

3 回答 3

4

像这样的东西应该工作。(这段代码不完整——我假设你知道基本的内存和类管理以及其他东西,所以我专注于实际问题)

在您的班级中保留一些 ivars 来存储对您创建的 popovercontrollers 的引用

@interface MyClass : NSObject <UIPopoverControllerDelegate> {
    UIPopoverController *popover1;
    UIPopoverComtroller *popover2;
}

像往常一样初始化你的 popovercontrollers 并在 popover1 和 popover2 中保存对它们每个的引用。

然后在 UIPopoverDelegate 协议的实现中:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    if(popoverController == popover1) {
        //popover1 was dismissed
    } else if (popoverController == popover2) {
        //popover2 was dismissed
    }
}

编辑:查看您的评论,似乎您的意思是您只使用一个 popovercontroller,并用不同的 UIViewControllers 替换它的内容视图。

如果是这种情况,我建议您执行这些特定 UIViewController 中的任何操作,以影响您的应用程序的状态。

然后,一旦弹出框被关闭,您就可以使用新的刷新状态重新加载原始视图。

或者您将其更改为使用两个不同的 UIPopoverController 实例。

于 2012-04-18T10:57:37.773 回答
3

这就是从 Xcode 6.3 beta 3 开始的 Swift 中的方式,在 Objective-C 中应该是类似的。

  1. 您呈现的视图应该有ViewController自己的。

     import UIKit
    
     class MenuBookmarksViewController: UITableViewController  {
     }
    
  2. UIViewController向该类添加扩展或将代码(如下)放在UIViewController将显示您的弹出框的内部:

    extension UIViewController: UIPopoverPresentationControllerDelegate {
      public func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
           if popoverPresentationController.presentedViewController as? MenuBookmarksViewController != nil {
              ///do your stuff
           }
      }
    }
    
于 2015-04-08T21:06:22.293 回答
1

您通过了哪个弹出框正在被解雇popoverControllerDidDismissPopover:。使用它来确定您在每种情况下要做什么。

您可能希望将您的UIPopoverController实例存储为呈现它们的任何对象的 ivars,然后与您在委托方法中传递的值进行比较。

于 2012-04-18T10:15:43.443 回答