2016-01-22 55 views
1

我正在使用viewWillDisappear(animated: Bool)將數據推送到我的服務器,作爲auto-save類型的功能。但是,有時會發生用戶輸入的數據不完整或無效的事件,因此我不想將其推送到服務器。在這種情況下,我提出了一個顯示通知的UIAlertController是否可以延遲或取消視圖消失?

目前通知只允許用戶解除它,但如果用戶願意,允許用戶可以選擇保留在頁面上並進行更正,這將是指數更有利的。

基本上,我想阻止視圖改變,直到用戶對提交的UIAlertController做出選擇之後。如果這是不可能的,那麼我至少會將用戶送回到先前的視圖,並被授予他們選擇該選項的權利。

目前,我的應用程序使用由SWRevealViewController庫提供的自定義Segue,名爲reveal view controller, push controller,它允許我在導航到的視圖上使用導航抽屜。如果不這樣做,應用程序將崩潰。

不幸在UIAlertAction的回調中使用self.navigationController?.popViewControllerAnimated(true)不會產生任何結果。

編輯: 對於任何在將來讀這篇文章,我有一個變通的解決方案,它可以或可能不是正確的操作方式。不要將按鈕連接到segue以進行導航,而應創建合併每個視圖的手動segue。 (您可以通過右鍵單擊並從一個視圖拖動到另一個視圖來完成此操作),一旦完成此操作併爲其創建一個@IBAction,則該@IBAction應該顯示UIAlertController並且在UIAlertAction的內部,您應該調用您的segue每當你想移動到下一個視圖時手動使用performSegueWithIdentifier。如果你想保持觀點,你根本就不會這麼稱呼它。

再一次,這可能或可能不是正確的方法來處理這個問題,但除非有人告訴我另一種更正確的方式,這是我將如何處理它。

+0

目前,我找到了一個解決方法,手動調用segue並執行代碼以顯示警報,同時完全繞過'viewWillDisappear'的需求。但是想要一個正確的答案。 – Hobbyist

回答

1

其實編輯中的方法是正確的。我們最常見的做法是有一個按鈕或任何其他操作,它們將開始發送,評估數據,同時向視圖添加一些活動指示器,以便用戶知道他需要等待任務完成。

之後,這取決於案件。我們要麼成功導航到新屏幕,要麼向用戶提供一些警告視圖,指示操作已完成,或者在某些情況下甚至顯示一些文本或圖像,指示操作已完成,顯示一秒鐘左右,然後導航至其他屏幕。如果出現錯誤,我們會顯示一些信息並自然保留在屏幕上。

您的問題似乎已經開始的地方實際上是濫用故事板功能。你應該知道這種類型的開發可能會給你帶來很多麻煩。我建議你不惜一切代價避免繼續下去。即使和特別如果你是在代碼中調用它們。只需撥打navigationController.poppush,present,dismiss,setViewControllers ......但即使您仍然在使用它們,請記住,這只是您的一些捷徑,您仍然應該瞭解如何在代碼中完成所有這些操作。

+0

謝謝,我會記住這一點。我只在兩週前開始iOS開發,已經完成了我的應用程序。 (使用Parse作爲後端的相當大規模的社交網絡應用程序)。這既是一個學習項目,也是一次非常棒的體驗。 問題(目前)是我正在使用的庫依賴於segues。我很快就會在這裏編寫我自己的導航抽屜,這很快就會出現。 在我開始使用導航抽屜庫之前,我使用了所有的navigationController函數。再次感謝你的話。 – Hobbyist