我有一个可以显示几个弹出窗口的viewcontroller。不是在同一时间。哪个是了解popoverControllerDidDismissPopover
哪个popover被解雇的最佳方式?
我必须对被解雇的弹出窗口采取不同的行动。
非常感谢
答案 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中应该类似。
您展示的视图本身应该有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
}
}
}
答案 2 :(得分:1)
你被传递了popoverControllerDidDismissPopover:
中被解雇的popover。用它来确定你想要在每种情况下做什么。
您可能希望将UIPopoverController
实例存储为呈现它们的任何对象的ivars,然后只与您在委托方法中传递的值进行比较。