我正在利用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。如果你想留在视图上,你根本就不要打电话。
再一次这可能是,或者可能不是处理这个问题的正确方法,但除非有人告诉我另一个更正确的方法,否则我将如何处理它。
答案 0 :(得分:1)
实际上编辑中的方法是正确的。我们最常做的是有一个按钮或任何其他动作,它将开始发送,评估数据,同时向视图添加一些活动指示器,以便用户知道他需要等待任务完成。
完成后,取决于具体情况。我们要么在成功时导航到新屏幕,要么向用户提供一些警报视图,指示操作已完成,或者在某些情况下甚至显示一些文本或图像,指示操作已完成显示一秒左右,然后导航到其他屏幕。如果发生错误,我们会显示一些错误,并自然地留在屏幕上。
您的问题似乎已经开始实际上是滥用故事板功能。您应该知道这种类型的开发可能会给您带来很多麻烦。我建议你不惜一切代价避免segues。即使并且特别是如果你在代码中调用它们。只需致电navigationController.pop
或push
,present
,dismiss
,setViewControllers
......但即使您继续使用它们,请记住这只是一些你的快捷方式,你仍然应该了解如何在代码中完成所有这些。