1

我正在基于导航的应用程序中实现自定义 URL 方案,以让用户从电子邮件中导入数据,因此我的应用程序委托中有此方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

如果在该方法中导入数据后,我可以使用 popToRootViewController 返回到 rootViewController 向用户显示新数据,那就太好了。

但是,如果用户在模式视图控制器或操作表启动时导入了数据,则这不起作用(popToRootViewController 不会关闭这些数据,并导致应用程序冻结)。

有什么方法可以安全地关闭/销毁除 rootViewController 之外的所有视图控制器/操作表/警报视图?

或者,如果用户有一个操作表或模态视图控制器,也许可以从我的应用程序委托中判断?

或者,我是否只是将它们留在他们离开的地方,而不提供任何直接表明数据已成功添加的指示?

4

1 回答 1

1

您必须自己跟踪它们。一种简单的方法是在每次显示模态内容时发布通知,并参考 userinfo 字典中的模态视图/工作表/警报。每当模式视图返回时,发布不同的通知。

观察您的应用程序委托中的通知(或任何有意义的地方,但应用程序委托是最简单的)。当您收到第一个时,存储对模态视图的(弱)引用,并在收到第二个时将引用归零。-application:handleOpenURL:在这两者之间,如果您的引用不为零,您将能够通过关闭模态视图来做出响应。

另请注意,在警报的情况下,最好在您进入后台时将其关闭。几周后你可能会再次出现在前台,当他们可能不再知道你在问什么时,用“你确定吗?确定/取消”来问候用户是一种不好的风格。

于 2010-11-03T20:00:01.713 回答