是否可以延迟或取消视图消失?

时间:2016-01-22 13:41:18

标签: ios

我正在利用viewWillDisappear(animated: Bool)将数据推送到我的服务器,作为auto-save类型功能。但是,有时会发生用户输入的数据不完整或无效的事件,因此我不想将其推送到服务器。在这种情况下,我会提供显示通知的UIAlertController

目前,通知只允许用户将其解雇,但如果他们愿意,允许用户选择留在页面上并进行更正将会更加有益。

基本上,我希望阻止视图更改,直到用户在显示的UIAlertController上做出选择。如果这是不可能的,那么我至少会将用户发送回上一个视图,授予他们选择该选项。

目前我的应用程序使用SWRevealViewController库提供的自定义Segue,称为reveal view controller, push controller,它允许我在我导航到的视图上使用导航抽屉。如果不这样做,应用程序将崩溃。

不幸的是,在self.navigationController?.popViewControllerAnimated(true)的回调中使用UIAlertAction不会产生任何结果。

修改 对于将来读这篇文章的人来说,我有一个解决方案,这可能是,也可能不是解决这个问题的正确方法。不是将按钮链接到segue进行导航,而是创建合并每个视图的手动segue。 (您可以通过右键单击+从一个视图拖动到另一个视图来执行此操作),完成此操作后,按下按钮并为其创建@IBAction,此@IBAction应显示{{1}在UIAlertController内部,只要您想移动到下一个视图,就应该使用UIAlertAction手动调用您的segue。如果你想留在视图上,你根本就不要打电话。

再一次这可能是,或者可能不是处理这个问题的正确方法,但除非有人告诉我另一个更正确的方法,否则我将如何处理它。

1 个答案:

答案 0 :(得分:1)

实际上编辑中的方法是正确的。我们最常做的是有一个按钮或任何其他动作,它将开始发送,评估数据,同时向视图添加一些活动指示器,以便用户知道他需要等待任务完成。

完成后,取决于具体情况。我们要么在成功时导航到新屏幕,要么向用户提供一些警报视图,指示操作已完成,或者在某些情况下甚至显示一些文本或图像,指示操作已完成显示一秒左右,然后导航到其他屏幕。如果发生错误,我们会显示一些错误,并自然地留在屏幕上。

您的问题似乎已经开始实际上是滥用故事板功能。您应该知道这种类型的开发可能会给您带来很多麻烦。我建议你不惜一切代价避免segues。即使并且特别是如果你在代码中调用它们。只需致电navigationController.poppushpresentdismisssetViewControllers ......但即使您继续使用它们,请记住这只是一些你的快捷方式,你仍然应该了解如何在代码中完成所有这些。