在没有情节提要的情况下放松

时间:2020-06-02 12:35:36

标签: ios swift unwind-segue

我正在用xib文件替换情节提要中的当前视图。但是我遇到了关于ConfigureServices(ServiceConfigurationContext context) { ... ... Configure<AbpLocalizationOptions>(options => { ... ... options.Resources .Get<AbpTenantManagementResource>() .AddVirtualJson("/Localization/YourTenantManagementResource"); }); 的问题。

在Xib文件中,我无法创建展开序列。并找不到常规的方法。当我在网络上搜索此问题时,我发现有关“如何以编程方式执行展开搜索”的内容。这不是我想要的。我需要一种以编程方式执行展开操作的方法。

我在Apple文档中发现了How an Unwind Segue Determines its Destination View Controller,并认为我可以通过编程方式完成此操作。但是,不赞成使用unwind方法(现在是viewControllerForUnwindSegueAction:fromViewController:withSender:),并且此操作的新方法(forUnwindSegueAction(_:from:withSender:))使用了无法通过编程初始化的childContaining(_:)实例。

所以,我可以看到两个选择。

  1. 确定应用程序中的展开点并创建操作以手动对其进行操作
  2. 创建一个取消执行者对象的工作方式类似于Apple的取消执行者,但使用它自己的方法。

如我所见,第二种选择更好。但是,正如我在开始提问时所说。我在网络上找不到任何东西,就像我遇到了这种情况一样,我确定这不是真的。我想我用错误的关键字搜索了这个,我需要一些帮助来解决这个问题。在选择以下选项之一之前,我想学习一些东西:

  • 有没有第三种解决方法
  • 您(不使用情节提要或xib的程序员)如何解决此问题

这是我的一些Google搜索

Unwind without storyboard

Unwind without interface builder

How to create unwind segue without storyboard

1 个答案:

答案 0 :(得分:0)

您并不孤单,也不是第一个遇到此问题的人。我将此称为反向路由的问题。

为说明问题,我将展示一个相对复杂的放松情况的故事板版本:

enter image description here

我们有一个带两个孩子的标签栏控制器。第一个孩子是导航控制器,已将一个视图控制器(第一行末尾的绿色v.c.)推入其根视图控制器(黄色v.c.)的顶部。第二个孩子是一个普通的视图控制器,其中显示了一个视图控制器(第二行末尾的白色v.c。)。

目标是从白色v.c.到 yellow v.c.在第一行。

如果您使用情节提要,这很简单。黄色v.c.包含一个unwind方法(名称实际上并不重要),您可以将白色v.c中的按钮“退出”钩住。那个方法。在运行时,用户点击按钮,运行时“神奇地”关闭了白色的v.c.,将标签栏控制器切换到第一个孩子,然后弹出绿色的v.c.,使我们处于黄色的v.c。根据需要。

现在用代码完成!嗯,是的怎么样?那是问题。

具有讽刺意味的是。显然,运行时知道如何解决此问题,因为在情节提要中使用展开键时,它确实可以解决该问题。但是当您使用情节提要时,没有内置的程序模拟。没有unwind命令会导致复杂的展开机制被激活并执行与基于情节提要的应用程序相同的操作。

这是UIKit中的巨大缺陷。苹果基本上要求我们使用情节提要。但是每个人都知道,团队开发的任何应用都可能会避免使用故事板,因为通过git协调故事板的版本几乎是不可能的。因此,苹果似乎并没有生活在现实世界中。他们没有提供应用程序实际开发所需的运行时支持。

一个简单的解决方案(从粗略的角度来说很简单)只是“手动”放松。该应用程序有一个“协调器”对象,其任务是处理这种向后路由。如果您是白人v.c.而您想“放松”到黄色的vc,您的协调员只需知道这就是我们可能想要做的事情,它知道必要的步骤为了到达那里。

基本上,我的意思是必须为协调器提供应用程序将需要执行的所有反向路由的固定列表,以及有关如何执行它们的说明。鉴于我们在哪里以及我们想回到哪里,协调员只需执行相应的步骤即可。

(您,OP,您会发现我没有告诉过您您不知道的任何事情。我概述的正是您的选择1。这是正确的。我告诉您的是:选项2会很好,但是它不存在,也不值得尝试编写,因此请退回到选项1。)