如何在不知道谁展示它们的情况下解除UIActionSheet和UIPopoverController

3
在我的客户端应用程序中,我有一个空闲超时控制机制。当用户在指定的时间间隔内没有使用应用程序时,我会显示警告并将其返回到登录屏幕。这个控制发生在我的容器视图中,我在其中初始化所有其他视图。当空闲时间结束时,我将此容器视图弹出到其调用者,即登录屏幕。
问题是,如果用户执行了显示操作表或弹出窗口的操作,然后在空闲时间结束之前不做任何操作,当我将其引导到登录屏幕时,这些操作表和弹出窗口也会留在登录屏幕上,因为我没有关闭它们。
为解决这个问题,我考虑将所有操作表和弹出窗口作为视图控制器的保留成员,并在其所有者的viewWillDisappear方法中关闭它们。但我有很多视图控制器,所以我正在寻找其他方法(如果有的话)。
因此,问题是如何使所有这些操作表和弹出窗口从我的登录屏幕消失,而不知道它们的调用者是谁?

1
更重要的是,你需要知道“they”指的是谁,而不是谁调用/显示了它们。如果是这种情况,你需要集中你的机制来显示它们。 - bshirley
是的,没错。这就是我计划将它们转换为Presenter的成员变量的原因。将它们全部添加到全局数组中,并实现一个机制,谁消除它们也会从数组中删除它们,这是否是个好主意? - aslı
这似乎是一个可行的解决方案 - 而且,最好一次只在屏幕上显示一个弹出窗口(如果现在有这个问题的话)。 - bshirley
是的,我检查了一次只有一个弹出窗口。所以在更好的想法出现之前,我会尝试这个。感谢灵感:] - aslı
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];

1

我将写下自己的解决方案,因为我们在问题的评论中与bshirley进行了讨论。我已经实现了一个类似于这样的机制来解决问题:

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

希望这可以帮助任何需要实现类似机制的人。欢迎您的评论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接