我的应用程序中有几个弹出窗口,我很难确定哪个弹出窗口被解雇了。是否有与UIPopOvers等效的“标记”功能?
我可以在popoverContorllerDidDismissPopover方法中NSLog
popoverController并查看每个方法的内存引用,但这没有帮助。
#pragma mark - Popover controller delegates
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
NSLog(@"Popover dismised %@", popoverController);
}
答案 0 :(得分:1)
here的摘录:
如果我理解这个问题,那么基本上没有 - 而且令人抓狂。 一方面你被告知只有一个popover应该出现在 任何一刻。另一方面,你不会自动得到一个 引用那个popover。因此,您可以存储参考, 手动,当它弹出控制器显示它时 popover,以便您可以稍后与之交谈,以便将其解雇。 因此,Popover控制器管理可以非常精细 笨拙;你正在做系统应该做的各种工作 为你做的。
iOS很有趣。我想起了iOS 4中没有通话的方式 告诉你当前的第一响应者。显然系统知道 第一响应者是什么,为什么不告诉你呢?这有点儿 哑。这是类似的;系统清楚地知道它不会有用的东西 与你分享。米。
答案 1 :(得分:0)
正如@Anoop所说,通常一次只能显示一个弹出窗口。
一种可能的解决方案是检查弹出窗口上的contentViewController
属性。如果要存储每个视图控制器的引用,则可以执行以下操作:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
if ( popoverController.contentViewController == self.someUIViewController ) {
// do stuff
}
else if ( popoverController.contentViewController == someoTherViewController ) {
//
}
NSLog(@"Popover dismised %@", popoverController);
}
如果无法存储对每个内容视图控制器的引用(或者可能不是一个好主意),您可以随时检查其类型:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
if ( [popoverController.contentViewController isKindOfClass:[MyAwesomeViewController class]] ) {
// do stuff
}
else if ( [popoverController.contentViewController isKindOfClass:[MyOtherViewController class]] ) {
//
}
NSLog(@"Popover dismised %@", popoverController);
}
另一种可能的解决方案,从设计角度来看可能更好,就是将委托传递给pop中包含的视图控制器。 More here。这样,显示的视图控制器可以将数据发送回主视图控制器。
答案 2 :(得分:0)
如何区分弹出窗口有很多方法。我将列出其中几个:
您在询问tag
。请注意,每个popover都有一个内容视图控制器,并且此控制器具有可以标记的视图。但是,通常可以使用魔术整数标记来区分视图。
将popover的类型存储到控制器的变量/属性中,例如作为enum
。这是最简单的方法。
将必要的信息添加到popover中,但要聪明一点,例如
@interface MyPopoverController : UIPopoverController
@property (nonatomic, copy, readwrite) void (^dissmissHandler)(void);
@end
@implementation MyPopoverController
- (id)initWithContentViewController:(UIViewController*)contentView {
self = [super initWithContentViewController:contentView];
if (!self) {
return nil;
}
self.delegate = self;
return self;
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController*)popover {
assert(popover == self);
if (self.dissmissHandler) {
self.dissmissHandler();
}
}
@end
MyPopoverController* popover = [MyPopoverController alloc] initWithContentViewController:...];
popover.dissmissHandler = ^{
...
};