快速行动后处理对话

时间:2016-06-07 14:11:25

标签: ios swift segue quickaction

我有一个iOS应用程序,它包含一个“概述”场景作为初始视图控制器,一个“EntryList”场景和一个“NewEntry”场景。它们由导航控制器组织,并使用show(push)segues以上述顺序连接。 NewEntry视图控制器具有“保存”和“取消”菜单栏项,可以展开到EntryList控制器。

我在应用程序图标中添加了一个快速操作,通过使用带有从导航控制器到NewEntry控制器的segue的performSegueWithIdentifier直接跳转到NewEntry控制器。

在应用程序暂停运行后使用“快速操作”时,无论以前的内容如何,​​都会将新的NewEntry实例推送到导航堆栈。因此,甚至可以堆叠多个NewEntry实例。在这种情况下,任何剩余的旧NewEntry实例都可以被丢弃。

在应用程序终止后使用Quick Action时,总是首先创建一个新的Overview实例(因为我是初始导航控制器之后的第一个实际VC,我猜?),然后推送NewEntry。在这种情况下没有EntryList场景。

当按下取消或保存项目时,NewEntry场景将被丢弃并适当地采取行动,使用户处于应用程序之前的状态,否则处于概览场景中。

我的问题:

  • 应用程序应该执行的正确行为是什么?
  • 我如何实现这种行为?
  • 实现所有segue的“最佳实践”是什么,特别是当NewEntry场景不一定在EntryList场景之后被推送时?

我想避开“UI意大利面条代码”,导航堆栈黑客等等。

1 个答案:

答案 0 :(得分:0)

因此,经过一些试验+错误后,我目前的解决方案是将NewEntry场景嵌入到自己的导航控制器中。这是来自EntryList和Quick Action(源自主导航控制器)的“Present Modally”segue的目标。 “保存”和“取消”按钮不会展开,而是在内部连接到执行必要工作的操作,最后调用dismissViewControllerAnimated()

如果这是正确的方法,或者你有更好的解决方案,请发表评论。