如何从一个嵌入视图优雅地导航到另一个嵌入视图(在IB中使用布局)?

时间:2018-05-08 09:33:16

标签: ios swift uicontainerview uinavigation

在此应用程序中,用户可以执行活动A或B.执行A时,查看者会看到嵌入的视图A;但是在A期间,观众可以选择查看嵌入的视图B.(活动B也是如此,只有相反的视图。)

我在IB中的设置如下图所示。不知道有什么更好的方法,我创建了两倍于我喜欢的活动场景:对于“Do Activity A”分支,我有两个并排的活动A场景副本。第一个有一个嵌入视图A的嵌入;第二个是嵌入视图B的嵌入。(“B”设置是相反的。)

为了避免更多重复,我确实让两个活动分支共享视图A和B.尽管活动场景加倍,但它们链接到的类(ActivityAViewController和ActivityBViewController)却没有。我还没有发现任何并发症。 。 。

与我见过的其他变通方法相比,我选择了上面的“push-pop”布局,因为视图A和B都很昂贵。我不想丢弃主视图只是为了加载辅助,我不想不必要地加载它们。此外,我想在IB中这样做,因为真正的应用程序更复杂,看到我的所有布局有助于我理解和开发它。话虽如此,我的方法似乎仍然存在。

我的问题是

  1. 有没有更好的方法在IB中设置它?
  2. 活动场景的共享视图控制器会发生什么?是为每个创建了一个单独的类实例,还是两个场景最终共享同一个实例?
  3. 同样,共享视图会发生什么?
  4. 苹果公司的解释似乎很清楚,尽管他们比我目前拥有更多关于Cocoa Touch和相关行话的知识。任何澄清和见解将不胜感激。

    Storyboard of Navigation With Embedded Views

1 个答案:

答案 0 :(得分:1)

  

有没有更好的方法在IB中设置它?

还有其他方法可以设置它。他们都有权衡。你的方法有一定的外观,如果你想以不同的方式连接它,它会看起来有点不同。您的方法还具有以下优点:所有导航都由Storyboard处理;不需要额外的代码。

替代方案包括在自己的小导航控制器中嵌入视图A和B.然后切换到查看另一个将涉及单击该navigationController。这避免了外部Activity A和B控制器的重复,但它会通过向嵌入式视图添加navigationBar来改变外观。

您也可以这样做并隐藏导航栏并从外部活动A或B控制器传递消息,告诉它何时推送另一个viewController。这具有一些额外的非平凡编码的缺点;故事板不再为您管理导航。

您也可以在UITabBarController中运行它。如果您只需要一个活动A和活动B,那么它的缺点是同时创建活动A和活动B,但您可以在它们之间自由切换而无需重新创建任何视图。

  

活动场景会发生什么?共享视图控制器?是一个   为每个创建单独的类实例,或者最终完成两个场景   共享同一个实例?

每个segue(包括嵌入的segues)都会创建一个新的viewController实例。没有实例共享。

  

同样,共享视图会发生什么?

每次都会创建A和B的新实例。