2010-11-03 112 views
1

我执行我的基于导航应用的自定义URL方案,让用户从电子邮件导入数据,所以我在我的应用程序委托此方法:关闭或销毁所有视图控制器,操作表等?

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

这将是很好,如果导入后在该方法中的数据,我可以使用popToRootViewController返回到rootViewController以向用户显示新数据。

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

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

或者也许某种方式来告诉我的应用程序委托内,如果用户有一个行动表或模式视图控制器了?

或者,我是否将他们留在他们离开的地方,而不立即提供数据已成功添加的指示?

回答

1

你必须自己跟踪它们。一个简单的方法就是发布一个通知,并在用户信息词典中引用模态视图/表单/警报,每次显示模态时都会显示。每当模态视图返回时,发布不同的通知。

观察您的应用程序委托中的通知(或者这样做有意义,但应用程序委托最简单)。当你收到第一个,存储一个(弱)引用到模态视图,并且在你接收到第二个引用时归零。在两者之间,如果您的参考非零,您将能够通过驳回模态视图来响应-application:handleOpenURL:

另请注意,在警报情况下,最好在进入背景时关闭它们。在你再次被预先接受之前,周可能会通过,当他们可能不知道你在问什么时,用“你确定吗?确定/取消”来迎接用户是不好的风格。

+0

谢谢......我还没有熟悉通知,但会检查它。现在我已经决定只显示一个UIAlertView,让用户知道已经添加了新的数据,并且不会强制用户回到根视图控制器。 (无论如何,现在我已经尝试过了,从用户角度来看也许更好) – 2010-11-04 00:45:24

相关问题