3

在我的客户端应用程序中,我有一个空闲超时控制机制,当用户在指定的时间间隔内没有对应用程序执行任何操作时,我会显示一个警告并将他返回到登录屏幕。此控件发生在我启动所有其他视图的容器视图中。当空闲时间到时,我将这个容器视图弹出给它的调用者,即登录屏幕。

问题是,如果用户做了一些显示操作表或弹出框的操作,然后在空闲时间结束之前不做任何事情,当我将他扔到登录屏幕时,操作表和弹出框也会保留在登录屏幕上因为我不解雇他们。

为了解决这个问题,我可以考虑让所有操作表和弹出框保留我的视图控制器的成员,然后在其所有者的 viewWillDisappear 方法上将它们解散。但是我有这么多视图控制器,所以我正在寻找其他方法,如果有的话。

所以,问题是如何在不知道调用者是谁的情况下让所有这些操作表和弹出框从我的登录屏幕中消失?

4

2 回答 2

2

我会注册 UIPopover 实例来收听一些通知。

[[NSNotificationCenter defaultCenter] addObserver:_myPopOver 
                                         selector:@selector(myDismissPopover)
                                             name:@"dismissPopover" 
                                           object:nil];

并为 UIPopover 类添加扩展。

- (void) myDismissPopover {
 [self dismissPopoverAnimated:YES];
}

当我需要关闭弹出窗口时,我只需要发布通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"dismissPopover" 
                                                    object:nil];
于 2011-11-18T23:38:58.857 回答
1

当我们在问题的评论中与bshirley交谈时,我将写下我自己的解决方案。我已经实现了这样的机制来解决这个问题:

在我的登录视图控制器中,我创建了一个 NSMutableArray,它将保留我所有将被关闭的操作表和弹出框控制器。然后我将此数组存储在全局字典中。我通过实用方法访问这本字典。然后在整个应用程序中,无论谁创建操作表或弹出框控制器,都将组件添加到此数组(从全局数据中检索数组,对其进行修改,然后将其保存回全局数据)。然后,当用户返回登录屏幕时,在我的登录视图控制器的 viewWillDisappear 中,我循环遍历此数组并通过检查我从数组中获得的 UIView 是操作表还是弹出框控制器来调用适当的解除方法。然后我删除了这个数组的所有元素,然后再次将其存储回全局数据中。

希望这可以帮助任何需要实施类似机制的人。您的意见将不胜感激。

于 2011-07-16T16:01:03.903 回答