我有一个可以显示多个弹出框的视图控制器。不是同时。哪个是知道哪个弹出窗口被解雇的最佳方法popoverControllerDidDismissPopover
?
我必须对被解雇的弹出框采取不同的行动。
非常感谢
我有一个可以显示多个弹出框的视图控制器。不是同时。哪个是知道哪个弹出窗口被解雇的最佳方法popoverControllerDidDismissPopover
?
我必须对被解雇的弹出框采取不同的行动。
非常感谢
像这样的东西应该工作。(这段代码不完整——我假设你知道基本的内存和类管理以及其他东西,所以我专注于实际问题)
在您的班级中保留一些 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 实例。
这就是从 Xcode 6.3 beta 3 开始的 Swift 中的方式,在 Objective-C 中应该是类似的。
您呈现的视图应该有ViewController
自己的。
import UIKit
class MenuBookmarksViewController: UITableViewController {
}
UIViewController
向该类添加扩展或将代码(如下)放在UIViewController
将显示您的弹出框的内部:
extension UIViewController: UIPopoverPresentationControllerDelegate {
public func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
if popoverPresentationController.presentedViewController as? MenuBookmarksViewController != nil {
///do your stuff
}
}
}
您通过了哪个弹出框正在被解雇popoverControllerDidDismissPopover:
。使用它来确定您在每种情况下要做什么。
您可能希望将您的UIPopoverController
实例存储为呈现它们的任何对象的 ivars,然后与您在委托方法中传递的值进行比较。