2010-11-03 111 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

相關問題