如何在不知道是谁的情况下解雇UIActionSheets和UIPopoverControllers

时间:2011-07-14 13:24:38

标签: objective-c ios uipopovercontroller uiactionsheet dismiss

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

问题是,如果用户确实显示了操作表或弹出框,然后在空闲时间结束之前没有做任何事情,当我将他扔到登录屏幕时,操作表和弹出窗口也会保持打开状态登录屏幕,因为我不解雇他们。

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

所以,问题是如何在不知道他们的来电者是谁的情况下让所有这些操作表和弹出窗口离开我的登录屏幕?

2 个答案:

答案 0 :(得分:2)

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

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

并向UIPopover类添加扩展名。

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

当我需要解雇popover时,我只需要发布通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"dismissPopover" 
                                                    object:nil];

答案 1 :(得分:1)

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

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

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