如何正确更改视图控制器层次结构?

时间:2015-07-29 13:39:48

标签: ios uinavigationcontroller uitabbarcontroller

假设这是我的视图层次结构,

查看控制器:L (login:success) - > A | B | C | D | E - > (logout) L

是的,这是一个启用了UITabbarController的应用,从任何标签用户都可以退出,我需要将他带到L.每个标签都有单独的UINavigationController

来自VC

  • 用户可以转到A1 > A2 > A3
  • B用户可以转到B1 > B2 > B3
  • C用户可以转到C1 > C2 > C3
  • D用户可以转到D1 > D2 > D3 > D4
  • E用户可以转到E1 > E2

假设我的应用的用户处于特定标签的以下位置

  • 标签1:A3
  • 表2:B3
  • 标签3:C3
  • 表4:D3
  • 表5:E2

现在,

我的问题?

  • 如果用户想要从E2注销 - 如何通过从每个标签中删除所有推送的视图控制器来将他带到L?

  • 需要吗?如果是,那么我该如何为不同的导航控制器执行此操作。

  • 有什么好方法吗?

我在想做什么?

  • 我只是将根视图控制器更改为L,但我认为这不是完成此操作的好方法。

更新:找到了这个!

登录前:

enter image description here

登录后:

enter image description here

退出后:

enter image description here

请建议。

2 个答案:

答案 0 :(得分:1)

为什么不只是使用presentViewController从每个导航控制器以模态方式显示注销视图,而不是重新排序导航堆栈。

如果用户想要注销E2,请以模态方式显示注销视图,分配一个委托回叫,这样一旦他们注销并且视图即将解散,您就会知道。在此之前,弹出回root(E1)。

答案 1 :(得分:0)

我只是按照方式 - 我在想。

在为UITabbarController viewControllers属性设置nil后,我将根视图控制器更改为L.这将调用这些类的dealloc。此外,我正在每个标签中循环以将其弹出到其根目录。