如何知道哪个弹出窗口正在被解雇

时间:2012-04-18 10:12:44

标签: ios

我有一个可以显示几个弹出窗口的viewcontroller。不是在同一时间。哪个是了解popoverControllerDidDismissPopover哪个popover被解雇的最佳方式?

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

非常感谢

3 个答案:

答案 0 :(得分: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的两个不同实例。

答案 1 :(得分:3)

这就是Swift和Xcode 6.3 beta 3一样,在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
           }
      }
    }
    

答案 2 :(得分:1)

你被传递了popoverControllerDidDismissPopover:中被解雇的popover。用它来确定你想要在每种情况下做什么。

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