【问题标题】:How to dismiss UIActionSheets and UIPopoverControllers without knowing who presented them如何在不知道是谁提交的情况下关闭 UIActionSheet 和 UIPopoverController
【发布时间】:2011-10-05 08:22:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 更重要的是,您需要知道“他们”是谁,而不是谁打电话/展示了他们。如果是这种情况,您将需要集中显示它们的机制。
  • 是的,当然。这就是为什么我打算把它们变成演示者的成员变量。将它们全部添加到全局数组中并实现一种机制,就像将它们解散的人也将它们从数组中删除一样,这是一个好主意吗?
  • 这似乎是一个可行的解决方案 - 而且,最好一次只在屏幕上显示一个弹出框(如果现在这甚至是一个问题)
  • 是的,我检查一次只有一个弹出窗口。所以在一个更好的主意出现之前,我会尝试这个。谢谢你的灵感:]

标签: objective-c ios uipopovercontroller uiactionsheet dismiss


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多